Ich habe ein WordPress-Plugin entwickelt, das eine zusätzliche Verarbeitung durchführen muss, wenn ein Beitrag eines benutzerdefinierten Beitragstyps gespeichert wird.
Die logischste Lösung war die Verwendung der Aktion “save_post”. Nach dem Aufruf erstellt oder aktualisiert der Aktionshandler einen Datenbankeintrag in einer benutzerdefinierten Tabelle (abhängig davon, ob auf „Beitrag erstellen“ oder „Beitrag aktualisieren“ geklickt wird).
Ich habe dies implementiert und es schien perfekt zu funktionieren, aber es gibt ein kleines Problem, das ich gerne lösen würde. Es scheint, dass “save_post” auch ausgelöst wird, wenn die Seite “Post erstellen” zum ersten Mal geladen wird (dh bevor Benutzereingaben eingegeben werden und bevor die Schaltfläche “Neue/Änderungen senden” gedrückt wird).
Das bedeutet, dass die benutzerdefinierte Datenbanktabelle für jeden neuen Beitrag, der gespeichert wird, mit einer leeren Zeile gefüllt wird. Es bedeutet auch, dass jedes Mal, wenn die Seite zum Hinzufügen von Beiträgen geladen wird, eine leere Zeile vorhanden ist.
Hier ist eine vereinfachte Version meines “save_post”-Handlers:
function do_save_post($post_id) {
if (get_post_type($post_id) !== 'mycustomtype')
return $post_id;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return $post_id;
if (!current_user_can('edit_mycustomtype'))
return $post_id;
echo 'This happens when selecting "Add New" from admin sidebar.';
echo 'Even though post has not been saved or updated.';
echo 'This should only happen when button on right of editor is clicked.';
}
Wie kann ich erkennen, ob der Beitrag tatsächlich gespeichert wird?
Was bringt es, $post_id zurückzugeben, wenn es fehlschlägt?
– Helgathewikinger
8. Januar 2012 um 13:53 Uhr
@helgatheviking Es ermöglicht anderen Hooks, ihre Verarbeitung mit dem richtigen durchzuführen
$post_id
. Mein Hook versagt nicht, er will nur kontrollieren, wann die Verarbeitung durchgeführt werden soll. Das$post_id
wird von jedem Haken zu jedem Haken zurückgereicht.– Lea Hayes
8. Januar 2012 um 14:15 Uhr
@lea_hayes danke für die Antwort! Ich wusste nicht, dass die $post_id von Hook zu Hook weitergegeben wurde. Ich habe keine Probleme mit dem Abwürgen des Codes bemerkt, wenn ich ihn nicht zurücksende.
– Helgathewikinger
8. Januar 2012 um 14:26 Uhr