wake-up-neo.net

was ist der richtige Weg, um beim Update Post zu haken

ich versuche zu haken, wenn der Beitrag aktualisiert wird, aber alle Haken, die ich versuche, werden 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 diese add_action('save_post', 'my_function'); ausprobiert, aber es wurde keine ID als Echo ausgegeben, oder vielleicht wird diese Nachricht bereits als Echo ausgegeben, aber nie wiedergegeben, da der Redirect-Header gesendet wird.

15
rusly

Wenn ein Beitrag aktualisiert wird, werden einige Hooks ausgelöst:

  • 'pre_post_update'ist eine Aktion, die gerade vor der Aktualisierung des Posts ausgelöst wurde. Das übergebene Argument ist 2: $post_ID und $data, das ein Array von all den anderen Datenbankspalten von der Pfostentisch
  • 'transition_post_status'ist ein Hook, der bei der Aktualisierung ausgelöst wird und 3 Argumente übergibt: $ new_post_status, $old_post_status und $post (Objekt).
  • Dann gibt es noch zwei andere Übergangshooks, die aber dynamisch benannt sind. Dies bedeutet, dass die effektive Aktion vom alten und vom neuen Beitragsstatus abhängt."{$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. Dokumentation finden hier .
  • 'edit_post'die 2 Argumente übergeben: $post_ID und $post (Objekt)
  • 'post_updated'die 3 Argumente übergeben: $post_ID, $post_after (Objekt nach dem Update veröffentlichen), $post_before (Objekt vor dem Update veröffentlichen)
  • Ein weiterer dynamischer Hook:"save_post_{$post->post_type}", der vom Post-Typ abhängt, z. Für Standardbeiträge ist 'save_post_post' und für Seiten ist 'save_post_page', dieser Hook übergibt 3 Argumente: $post_ID, $post (Objekt) und $update, das ist ein boolescher Wert (wahr oder falsch), der wahr ist, wenn Sie eine Aktualisierung durchführen. Tatsächlich wird dieser Hook auch ausgelöst Wenn ein Beitrag zum ersten Mal gespeichert wird.
  • 'save_post' das sowohl beim Update als auch beim ersten Speichern ausgelöst wird und die gleichen 3 Argumente des vorherigen Hooks übergibt.
  • 'save_post_{$post_type}' wird sowohl beim Aktualisieren als auch beim ersten Speichern ausgelöst und übergibt dieselben ersten beiden Argumente des vorherigen Hooks.
  • Schließlich haben Sie 'wp_insert_post' , das sowohl beim Aktualisieren als auch beim ersten Speichern ausgelöst wird, 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, wenn sie "manuell" mit den Funktionen wp_update_post oder wp_insert_post aktualisiert werden.

Wenn der Beitrag über Admin-Seiten aktualisiert wird, werden zusätzliche Hooks ausgelöst. Ein Beispiel ist'update_post_redirect'oder'post_updated_messages'. (Verwendungsbeispiele finden Sie unter this und this WPSE-Antworten).

Beachten Sie, dass Sie, wenn Sie ein Hook-Argument verwenden möchten, dies nicht das erste ist, das Sie explizit im add_action-Aufruf deklarieren müssen.

Z.B. Wenn Sie das '$update'-Argument (das ist das dritte) des 'save_post'-Hooks verwenden möchten, müssen Sie 3 als $accepted_args-Parameter für add_action hinzufügen ( siehe docs ):

// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) {
  $msg = 'Is this un update? ';
  $msg .= $update ? 'Yes.' : 'No.';
  wp_die( $msg );
}

Letzter Hinweis zu Timing: Sie müssen sicher sein, dass add_actionbevor heißt, da die Aktion sonst ausgelöst wird.

Z.B. dieser Code:

wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );

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.

47
gmazzap

Warum nicht post_updated_messages einbinden? Auf diese Weise können Sie diese Nachricht genau wie den aktualisierten WordPress-Standardpost anzeigen.

add_filter('post_updated_messages', 'your_message');

function your_message(){
}

Hier finden Sie ein Beispiel:

http://codex.wordpress.org/Function_Reference/register_post_type

unter post_updated_messages

2
Jacob Rambo