Aufrufen einer Funktion nach der Erstellung eines neuen Beitrags für einen benutzerdefinierten WordPress-Beitragstyp?

8

Angenommen, ich habe einen neuen Beitragstyp erstellt 'product'. Gibt es eine Möglichkeit, eine Funktion (vom Benutzer erstellt) auszuführen, wenn dieser neue 'product'Beitrag erstellt wurde?

dotty
quelle
5
@dotty : Hilft Ihnen eine der folgenden Antworten bei der Lösung Ihres Problems? Wenn ja, stimmen Sie sie bitte ab, um den Menschen zu danken, die Ihnen geholfen haben, und wählen Sie die beste Antwort aus, damit Ihre Frage nicht in der "unbeantworteten" Liste bleibt.
MikeSchinkel

Antworten:

5

In functions.php:

function mynewproduct(){
    myfunction();
}
add_action( 'new_product', 'mynewproduct' );

Weitere Informationen und die offizielle Dokumentation finden Sie hier:

http://codex.wordpress.org/Post_Status_Transitions

Tom J Nowell
quelle
Ich denke nicht, dass new_{post_type}es funktionieren wird, weil das statusin der {status}_{post_type}Aktion niemals eingestellt wird new.
Spencer
In diesem Fall lohnt es sich zu wissen, was unter "erstellt"
Tom J Nowell
3

Hi @dotty:

Schauen Sie sich das Ende der wp_insert_post()Funktion in der Datei an /wp-includes/post.php(in den Zeilen 2148 bis 2392 in WordPress 3.0.1. Beachten Sie, dass WordPress diese Funktion sowohl zum Hinzufügen als auch zum Aktualisieren von Posts verwendet. )

Am Ende hat es den folgenden Code. Von diesem Code können Sie den Anruf identifizieren wp_transition_post_status()(mehr dazu in Kürze ) und wir haben die Aktion Haken edit_post, post_updated, save_postund wp_insert_post( ehrlich gesagt weiß ich nicht , warum wir die beiden letzteren , statt nur eine haben. ) Sie alle nutzen können diejenigen, die für Ihre Bedürfnisse geeignet sind:

<?php
wp_transition_post_status($data['post_status'], $previous_status, $post);
if ( $update ) {
  do_action('edit_post', $post_ID, $post);
  $post_after = get_post($post_ID);
  do_action( 'post_updated', $post_ID, $post_after, $post_before);
}
do_action('save_post', $post_ID, $post);
do_action('wp_insert_post', $post_ID, $post);
return $post_ID;

Und wie @Jan Fabry erwähnte, gibt es die Action-Hooks in wp_transition_post_status()(auf 2713 bis 2717 von /wp-includes/post.phpin WordPress 3.0.1). Beachten Sie, dass es drei davon gibt; Verwenden Sie gegebenenfalls:

<?php
function wp_transition_post_status($new_status, $old_status, $post) {
  do_action('transition_post_status', $new_status, $old_status, $post);
  do_action("${old_status}_to_$new_status", $post);
  do_action("${new_status}_$post->post_type", $post->ID, $post);
}
MikeSchinkel
quelle
2

Die wp_transition_post_statusFunktion wird aufgerufen, und dies löst die Aktion aus "${new_status}_$post->post_type". Wenn also a productin den publishStatus wechselt, wird die Aktion publish_productausgelöst.

Jan Fabry
quelle
Also ordne ich meine Funktion der Aktion "publish_product" zu?
Dotty
@dotty: Sie können dies tun, aber wenn ein Benutzer ein Produkt erstellt, aber noch nicht auf "Veröffentlichen" klickt, wird dieser Hook nicht ausgelöst. Dies kann oder kann nicht sein, was Sie wollen.
Jan Fabry