Eu tenho usado muito este site para resolver meus problemas, mas desta vez não consegui encontrar e responder ao meu problema.
Eu recebo um loop infinito ao usar wp_update_post
dentro de uma função que é chamada save_post
. Sei que esse é um problema comum, mas não consigo descobrir como evitá-lo.
Quero salvar a ordem das minhas postagens (que é do tipo 'seção'). Então, eu criei uma meta box personalizada que contém alguns elementos html classificáveis. Em cada elemento, há uma tag de entrada oculta com name = 'sectionorder []'. Então, quando clico no botão 'Atualizar' padrão do WordPress, uma matriz contendo todos os IDs das postagens (em ordem) é enviada via POST. Então, aqui está o código em que recupero a matriz e quero salvar o pedido:
// 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 );
}
}
Mas o problema é que ele inicia um loop infinito. Como evito isso? Talvez eu possa fazer isso de uma maneira completamente diferente?
Aprecie sua ajuda!
fonte
update_post_meta
em uma função ligada asave_post
eu também devo soltar e voltar a soltar depoisupdate_post_meta
?update_post_meta
(geralmente) não causará osave_post
disparo.Ainda não tenho a reputação de comentar, por isso estou adicionando uma resposta, mesmo que a de Stephen seja excelente e correta. Ele simplesmente não lida com instâncias quando você deseja definir a prioridade da ação.
Se você definir a prioridade ao adicionar a ação, mas não especificar a prioridade ao removê-la, ainda obterá um loop infinito.
// A maneira errada de lidar com isso - leva ao loop infinito
// A maneira correta de lidar com isso - executa apenas uma vez
fonte
remove_action/add_action
.