Apelarea unei Funcții după Crearea unui Post Nou pentru un Tip Personalizat de Post în WordPress?
Să presupunem că am creat un nou tip de post 'product'
. Există vreo modalitate de a executa o funcție (definită de utilizator) când acest nou post 'product'
a fost creat?

În functions.php:
function mynewproduct(){
myfunction();
}
add_action( 'new_product', 'mynewproduct' );
Pentru mai multe detalii și documentația oficială, consultați aici:

Bună @dotty:
Uită-te la sfârșitul funcției wp_insert_post()
din fișierul /wp-includes/post.php
(pe liniile 2148 până la 2392 în WordPress 3.0.1. Reține că WordPress utilizează această funcție atât pentru adăugarea, cât și pentru actualizarea postărilor.)
La final, are următorul cod. Din acest cod poți identifica apelul către wp_transition_post_status()
(mai multe despre asta în continuare) și avem action hook-urile edit_post
, post_updated
, save_post
și wp_insert_post
(sincer, nu știu de ce avem ultimele două în loc de doar unul.) Poți folosi oricare dintre acestea care se potrivesc nevoilor tale:
<?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;
Și cum a menționat @Jan Fabry, există action hook-urile găsite în wp_transition_post_status()
(pe liniile 2713 până la 2717 din /wp-includes/post.php
în WordPress 3.0.1.) Reține că sunt trei; folosește-le pe cele potrivite:
<?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);
}

Funcția wp_transition_post_status
va fi apelată, iar aceasta va declanșa acțiunea "${new_status}_$post->post_type"
, deci dacă un product
trece în starea publish
, acțiunea publish_product
va fi declanșată.
