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 bestand darin, die Aktion "save_post" zu verwenden. Beim Aufruf der Aktion wird entweder ein Datenbankeintrag in einer benutzerdefinierten Tabelle erstellt oder aktualisiert (je nachdem, ob "Beitrag erstellen" oder "Beitrag aktualisieren" angeklickt 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 "Create Post" zum ersten Mal geladen wird (d.h. bevor irgendwelche Benutzereingaben eingegeben werden und bevor die Schaltfläche "Submit new/changes" gedrückt wird).
Das bedeutet, dass die benutzerdefinierte Datenbanktabelle mit einer leeren Zeile für jeden neuen Beitrag, der gespeichert wird, gefüllt wird. Das bedeutet auch, dass es jedes Mal eine leere Zeile gibt, wenn die Seite "Beitrag hinzufügen" geladen wird.
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 feststellen, ob der Beitrag tatsächlich gespeichert wird?