Korzystałem z tej strony dużo do rozwiązywania moich problemów, ale tym razem nie udało mi się znaleźć i odpowiedzieć na mój problem.
Dostaję i nieskończoną pętlę, gdy używam wp_update_post
wewnątrz wywoływanej funkcji save_post
. Wiem, że jest to powszechny problem, ale nie mogę wymyślić, jak go uniknąć.
Chcę zapisać kolejność moich postów (które należą do sekcji „post”). Stworzyłem więc niestandardowe pole meta, które zawiera pewne sortowalne elementy HTML. W każdym elemencie znajduje się ukryty znacznik wejściowy o nazwie name = 'sectionorder []'. Kiedy klikam standardowy przycisk „Aktualizacja” WordPressa, tablica zawierająca wszystkie identyfikatory postów (w kolejności) jest wysyłana przez POST. Oto kod, w którym pobieram tablicę i chcę zapisać kolejność:
// Update section sort order
$sectionorder = $_POST['sectionorder'];
if (isset($sectionorder)) { // Avoid error if there is no sections added yet
foreach( $sectionorder as $no => $sectionID ) {
$post_update = array();
$post_update['ID'] = $sectionID;
$post_update['menu_order'] = $no;
wp_update_post( $post_update );
}
}
Problem polega jednak na tym, że uruchamia nieskończoną pętlę. Jak tego uniknąć? Może mogę to zrobić w zupełnie inny sposób?
Doceń swoją pomoc!
źródło
update_post_meta
w funkcji zaczepionej do, czysave_post
powinienem po niej odczepić i ponownie zaczepićupdate_post_meta
?update_post_meta
nie będzie (generalnie) przyczynąsave_post
uruchomienia.Nie mam reputacji do komentowania, więc dodam odpowiedź, mimo że Stephen jest doskonały i poprawny. Po prostu nie obsługuje instancji, gdy chcesz ustawić priorytet akcji.
Jeśli ustawisz priorytet podczas dodawania akcji, ale nie określisz priorytetu podczas jej usuwania, nadal otrzymasz nieskończoną pętlę.
// NIEPRAWIDŁOWY sposób na poradzenie sobie z tym - prowadzi do nieskończonej pętli
// PRAWY sposób na poradzenie sobie z tym - wykonuje się tylko raz
źródło
remove_action/add_action
.