J'utilise beaucoup ce site pour résoudre mes problèmes, mais cette fois je n'ai pas réussi à trouver et à répondre à mon problème.
J'obtiens et boucle infinie lors de l'utilisation à l' wp_update_post
intérieur d'une fonction qui est appelée save_post
. Je sais que c'est un problème courant, mais je ne sais pas comment l'éviter.
Je veux sauvegarder l'ordre de mes messages (qui est du type "section"). J'ai donc créé une méta-boîte personnalisée qui contient des éléments html triables. Dans chaque élément, il y a une balise d'entrée cachée avec name = 'sectionorder []'. Ainsi, lorsque je clique sur le bouton standard de mise à jour de WordPress, un tableau contenant tous les ID des messages (dans l'ordre) est envoyé via POST. Voici donc le code où je récupère le tableau, et souhaite enregistrer la commande:
// 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 );
}
}
Mais le problème est qu'il démarre une boucle infinie. Comment puis-je éviter cela? Peut-être que je peux le faire d'une manière complètement différente?
Appriciez votre aide!
la source
update_post_meta
dans une fonction accrochée àsave_post
dois-je également décrocher et recrocher aprèsupdate_post_meta
?update_post_meta
ne provoquera pas (généralement)save_post
le déclenchement.Je n'ai pas vraiment la réputation de commenter, donc j'ajoute une réponse même si Stephen's est excellent et correct. Il ne gère tout simplement pas les instances lorsque vous souhaitez définir la priorité de l'action.
Si vous définissez la priorité lors de l'ajout de l'action mais ne spécifiez pas la priorité lorsque vous la supprimez, vous obtiendrez toujours une boucle infinie.
// La mauvaise façon de gérer cela - conduit à une boucle infinie
// La bonne façon de gérer cela - s'exécute une seule fois
la source
remove_action/add_action
.