He estado usando mucho este sitio para resolver mis problemas, pero esta vez no logré encontrar y responder a mi problema.
Obtengo un bucle infinito cuando uso wp_update_post
dentro de una función que se llama save_post
. Sé que este es un problema común, pero no puedo entender cómo evitarlo.
Quiero guardar el orden de mis publicaciones (que es de la 'sección' de tipo de publicación). Así que hice un meta cuadro personalizado que contiene algunos elementos html ordenables. En cada elemento hay una etiqueta de entrada oculta con nombre = 'sectionorder []'. Entonces, cuando hago clic en el botón estándar 'Actualizar' de WordPress, se envía una matriz que contiene todos los ID de las publicaciones (en orden) a través de POST. Entonces, aquí está el código donde recupero la matriz y quiero guardar el 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 );
}
}
Pero el problema es que comienza un ciclo infinito. ¿Cómo evito eso? ¿Tal vez puedo hacerlo de una manera completamente diferente?
¡Agradece tu ayuda!
fuente
update_post_meta
en una función conectada asave_post
¿También debería desenganchar y volver a conectarupdate_post_meta
?update_post_meta
no causará (generalmente)save_post
que se active.Todavía no tengo la reputación de comentar, así que agrego una respuesta a pesar de que Stephen es excelente y correcta. Simplemente no maneja las instancias cuando desea establecer la prioridad de la acción.
Si establece la prioridad al agregar la acción pero no especifica la prioridad cuando la elimina, obtendrá un bucle infinito.
// La forma INCORRECTA de manejar esto: conduce al bucle infinito
// La forma CORRECTA de manejar esto: se ejecuta solo una vez
fuente
remove_action/add_action
.