web-dev-qa-db-fra.com

Appeler une fonction après la création d'un nouveau post pour un type de post personnalisé WordPress?

Supposons que j'ai créé un nouveau type de message 'product'. Existe-t-il un moyen d’exécuter une fonction (créée par l’utilisateur) lorsque cette nouvelle publication 'product' a été créée?

7
dotty

Dans functions.php:

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

Pour plus d'informations et la documentation officielle, voir ici:

http://codex.wordpress.org/Post_Status_Transitions

5
Tom J Nowell

Bonjour @dotty:

Jetez un coup d'œil à la fin de la fonction wp_insert_post() dans le fichier /wp-includes/post.php (sur les lignes 2148 à 2392 dans WordPress 3.0.1. Notez que WordPress utilise cette fonction pour l'ajout et la mise à jour de posts. )

À la fin, il y a le code suivant. A partir de ce code, vous pouvez identifier l'appel à wp_transition_post_status() (plus à ce sujet dans un instant) et nous avons les crochets d'action edit_post, post_updated, save_post et wp_insert_post ( franchement, je ne sais pas pourquoi nous avons les deux derniers au lieu de ) Vous pouvez utiliser n’importe lequel de ceux qui conviennent à vos besoins:

<?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;

Et comme @ Jan Fabry , il est mentionné les crochets d'action trouvés dans wp_transition_post_status() (sur 2713 à 2717 du /wp-includes/post.php dans WordPress 3.0.1.) Notez qu'il y en a trois; utiliser selon le cas:

<?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);
}
3
MikeSchinkel

La fonction wp_transition_post_status sera appelée, ce qui déclenchera l'action "${new_status}_$post->post_type". Ainsi, si une product passe à l'état publish, l'action publish_product sera déclenchée.

2
Jan Fabry