Ich versuche zu haken, wenn Post aktualisiert wird, aber alle Haken, die ich versuche, nie ausgeführt, außer updated_post_meta
add_action('updated_post_meta', 'my_function');
function my_function($post_id) {
echo 'This is my post ID : '.$post_id;
}
Ich habe dies versucht, add_action('save_post', 'my_function');
aber es wurde keine ID als Echo ausgegeben, oder diese Nachricht wurde bereits als Echo ausgegeben, aber nie wiedergegeben, da der Redirect-Header gesendet wurde.
save_post
, ist das hier ein Tippfehler, oder war das in Ihrem ursprünglichen Code? Aktivieren Sie außerdem das Debuggen während der Entwicklung.Antworten:
Wenn ein Beitrag aktualisiert wird, werden einige Hooks ausgelöst:
'pre_post_update'
ist eine Aktion, die unmittelbar vor der Aktualisierung des Posts ausgelöst wird. Das übergebene Argument ist 2:$post_ID
und$data
das ist ein Array aller anderen Datenbankspalten der Post-Tabelle'transition_post_status'
ist ein Hook, der beim Update ausgelöst wird und 3 Argumente übergibt: $ new_post_status$old_post_status
und$post
(object)."{$old_status}_to_{$new_status}"
und"{$new_status}_{$post->post_type}"
. Übergeben Sie zuerst das einzige Post-Objekt als Argument, die zweite Übergabe die Post-ID und das Post-Objekt. Finden Dokumentation hier .'edit_post'
die 2 Argumente übergeben:$post_ID
und$post
(Objekt)'post_updated'
dass Pass 3 Argumente$post_ID
,$post_after
(post - Objekt nach dem Update),$post_before
(post - Objekt vor der Aktualisierung)"save_post_{$post->post_type}"
die auf Post - Typ abhängig ist , zB für Standard Beiträge ist'save_post_post'
und für die Seiten ist'save_post_page'
, wobei dieser Haken Pass 3 Argumente:$post_ID
,$post
(Objekt) und$update
das ist ein boolean (wahr oder falsch) , die wahr ist , wenn Sie ein Update durchführen, in Tatsache ist, dass dieser Haken auch ausgelöst wird, wenn ein Beitrag zum ersten Mal gespeichert wird.save_post
' wird sowohl beim Update als auch beim ersten Speichern ausgelöst und übergibt die gleichen 3 Argumente des vorherigen Hooks.save_post_{$post_type}
' wird sowohl beim Aktualisieren als auch beim ersten Speichern ausgelöst und übergibt dieselben ersten beiden Argumente des vorherigen Hooks.wp_insert_post
' , das wird sowohl beim Update als auch beim ersten Speichern ausgelöst, und übergeben die gleichen 3 Argumente der vorherigen 2 Hooks.Diese Hooks werden jedes Mal ausgelöst, wenn ein Beitrag aktualisiert wird, sowohl über die Administrationsseiten im Backend als auch über die Funktionen
wp_update_post
oder, wenn sie "manuell" aktualisiert werdenwp_insert_post
.Wenn der Beitrag über Admin-Seiten aktualisiert wird, werden zusätzliche Hooks ausgelöst. Ein Beispiel ist
'update_post_redirect'
oder'post_updated_messages'
. (Siehe diese und diese WPSE-Antwort für Verwendungsbeispiele).Beachten Sie, dass, wenn Sie ein Hook-Argument verwenden möchten, dies nicht das erste ist, das Sie explizit beim
add_action
Aufruf deklarieren müssen .Wenn Sie beispielsweise das
'$update'
Argument (das ist das dritte) des Hooks verwenden möchten,'save_post'
müssen Sie es3
als$accepted_args
Parameter hinzufügenadd_action
( siehe Dokumentation ):Letzter Hinweis zum Timing : Sie müssen sicher sein, dass der
add_action
Aufruf erfolgt, bevor die Aktion ausgelöst wird. Andernfalls wird keine Aktion ausgeführt.ZB dieser Code:
wird nichts tun, da die Aktion hinzugefügt wird, nachdem der Hook ausgelöst wurde. Hier ist es einfach zu erkennen, in der realen Welt ist Code nicht immer so.
quelle
function save_post_test( $post_id, $post, $update ) { print ' post_id : '; var_export( $post_id ); print ' post : '; var_export( $post ); print ' update : '; var_export( $update ); wp_die( 'save_post hook runs when you click Add New..' ); } add_action( 'save_post', 'save_post_test', 10, 3 );
Warum wird die Aktion 'save_post' beim Hinzufügen von Neu statt beim Veröffentlichen ausgeführt? Um den Auto-Draft-Beitrag zu machen, nehme ich an.Warum Haken nicht in
post_updated_messages
. Auf diese Weise können Sie diese Nachricht genau wie den aktualisierten WordPress-Standardpost anzeigen.Hier finden Sie ein Beispiel:
http://codex.wordpress.org/Function_Reference/register_post_type
unter
post_updated_messages
quelle