Ich bin überrascht über die Tatsache, dass meine Funktion, die ich für die save_post
Aktion festgelegt habe, ausgelöst wird, wenn ich im Admin-Dashboard auf den Link "Neuer Beitrag" klicke. Hinweis - Dies ist, bevor ich gedrückt habe, Saveoder Updateund es wird sofort ausgelöst, nicht nach einer abgelaufenen Zeit oder nach einer automatischen Aktualisierung.
Wenn ich dann etwas eintippe und die Tasten Publishoder Updateoder drücke Save Draft, wird die Echo-Anweisung, die ich in meinen Aktionshandler eingefügt habe, nicht zurückgegeben, sodass es den Anschein hat, dass die Aktion zu keinem anderen Zeitpunkt ausgelöst wird. Dies kann unabhängig sein.
Hier ist mein Code:
add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
echo "<h1>YES!</h1>";
}
Dieses JA wird (oben auf der Seite) wiedergegeben, wenn ich auf den Link "Neuer Beitrag" drücke, es wird jedoch NICHT wiedergegeben, wenn ich etwas eingebe und dann Updateoder Publishoder drücke Save Draft. Dies scheint der Dokumentation über die save_post
Aktion und die wp_insert_post()
Funktion zu widersprechen .
Kann das jemand für mich klären?
Antworten:
Wenn Sie auf "Neuer Beitrag" klicken, laden Sie einfach die Seite
wp-admin/post-new.php
.Dabei erstellt WordPress immer einen neuen Beitrag (einen "Auto Draft"), um sicherzustellen, dass alle anderen Funktionen (z. B. das Hochladen von Medien) und Plugins wie gewohnt funktionieren, noch bevor Sie einen Entwurf speichern oder den Beitrag veröffentlichen.
Und das wiederum löst aus
save_post
. Daher dein Echo.Zwischen dem Speichern und dem Laden der folgenden Seite sendet WordPress tatsächlich eine
GET
Umleitung zurück auf dieselbe Seite, die transparent erscheint (dies können Sie mit einem HTTP-Monitor wie HttpFox beobachten ).Mit anderen Worten;
Update
oderPublish
save_post
Die Weiterleitung erscheint möglicherweise unnötig (da Sie nur
POST
zur gleichen Seite wechseln können), ist jedoch Teil einer Technik, die als " Post / Redirect / Get" bezeichnet wird, um doppelte Formularübermittlungen zu vermeiden .Wenn Sie versuchen, benutzerdefinierte Nachrichten basierend auf einem Ergebnis einer verknüpften Funktion auszudrucken
save_post
, lesen Sie diese Fragen / Antworten .* Nicht ganz richtig, Ihr Echo wird tatsächlich auftreten, bevor der Weiterleitungsheader gesendet wird, aber der Browser wird es entweder verwerfen oder die Dinge geschehen so schnell, dass es nie wiedergegeben wird.
quelle