Ich habe diese Seite viel benutzt, um meine Probleme zu lösen, aber diesmal ist es mir nicht gelungen, mein Problem zu finden und zu beantworten.
Ich bekomme eine Endlosschleife, wenn ich wp_update_post
eine Funktion verwende, die aufgerufen wird save_post
. Ich weiß, dass dies ein häufiges Problem ist, aber ich kann nicht herausfinden, wie ich es vermeiden kann.
Ich möchte die Reihenfolge meiner Beiträge speichern (die vom Beitragstyp 'Abschnitt' ist). Also habe ich eine benutzerdefinierte Meta-Box erstellt, die einige sortierbare HTML-Elemente enthält. In jedem Element gibt es ein verstecktes Eingabe-Tag mit dem Namen = 'sectionorder []'. Wenn ich also auf das Standard-WordPress-Update 'Update' klicke, wird ein Array mit allen IDs der Beiträge (in der richtigen Reihenfolge) per POST gesendet. Hier ist also der Code, mit dem ich das Array abrufe und die Reihenfolge speichern möchte:
// 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 );
}
}
Das Problem ist jedoch, dass eine Endlosschleife gestartet wird. Wie vermeide ich das? Vielleicht kann ich das ganz anders machen?
Schätzen Sie Ihre Hilfe!
quelle
update_post_meta
in einer Funktion, ansave_post
die ich angeschlossen bin , soll ich auch aushaken und danach wieder einhakenupdate_post_meta
?update_post_meta
wird (im Allgemeinen)save_post
nicht ausgelöst.Ich habe nicht den Ruf, etwas zu kommentieren, also füge ich eine Antwort hinzu, obwohl Stephens ausgezeichnet und korrekt ist. Es werden nur keine Instanzen behandelt, in denen Sie die Priorität der Aktion festlegen möchten.
Wenn Sie beim Hinzufügen der Aktion die Priorität festlegen, beim Entfernen jedoch keine Priorität angeben, wird weiterhin eine Endlosschleife angezeigt.
// Die falsche Art, damit umzugehen - führt zu einer Endlosschleife
// Der RICHTIGE Weg, dies zu handhaben - wird nur einmal ausgeführt
quelle
remove_action/add_action
.