Я много раз использовал этот сайт для решения своих проблем, но на этот раз мне не удалось найти и ответить на мою проблему.
Я получаю и бесконечный цикл при использовании wp_update_post
внутри функции, которая вызывается save_post
. Я знаю, что это общая проблема, но я не могу понять, как этого избежать.
Я хочу сохранить порядок своих постов (который относится к типу поста 'section'). Поэтому я создал собственный мета-блок, содержащий некоторые сортируемые html-элементы. В каждом элементе есть скрытый тег ввода с именем = 'sectionorder []'. Поэтому, когда я нажимаю на стандартную кнопку «Обновить» WordPress, массив, содержащий все идентификаторы сообщений (по порядку), отправляется через POST. Итак, вот код, где я извлекаю массив и хочу сохранить порядок:
// 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 );
}
}
Но проблема в том, что он запускает бесконечный цикл. Как мне этого избежать? Может быть, я могу сделать это совершенно по-другому?
Оцените вашу помощь!
источник
update_post_meta
функцию, к которойsave_post
я должен также отцепиться и снова зацепитьсяupdate_post_meta
?update_post_meta
не будет (в общем случае) причинойsave_post
срабатывания.У меня не достаточно репутации, чтобы комментировать, поэтому я добавляю ответ, хотя Стивен отличный и правильный. Он просто не обрабатывает экземпляры, когда вы хотите установить приоритет действия.
Если вы устанавливаете приоритет при добавлении действия, но не указываете приоритет при удалении, вы все равно получите бесконечный цикл.
// НЕПРАВИЛЬНЫЙ способ справиться с этим - приводит к бесконечному циклу
// ПРАВИЛЬНЫЙ способ справиться с этим - выполняется только один раз
источник
remove_action/add_action
.