Chiamare una Funzione Dopo la Creazione di un Nuovo Post per un Custom Post Type di WordPress?
Supponiamo che abbia creato un nuovo post type 'product'. Esiste un modo per eseguire una funzione (creata dall'utente) quando questo nuovo post 'product' viene creato?
In functions.php:
function mynewproduct(){
myfunction();
}
add_action( 'new_product', 'mynewproduct' );
Per maggiori informazioni e la documentazione ufficiale, fare riferimento qui:
Ciao @dotty:
Dai un'occhiata alla fine della funzione wp_insert_post() nel file /wp-includes/post.php (righe 2148 fino a 2392 in WordPress 3.0.1. Nota che WordPress utilizza questa funzione sia per aggiungere che per aggiornare i post.)
Alla fine contiene il seguente codice. Da questo codice puoi identificare la chiamata a wp_transition_post_status() (ne parleremo più avanti) e abbiamo gli hook di azione edit_post, post_updated, save_post e wp_insert_post (francamente non so perché abbiamo gli ultimi due invece di uno solo.) Puoi usare quelli appropriati alle tue esigenze:
<?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;
E come ha menzionato @Jan Fabry, ci sono gli hook di azione presenti in wp_transition_post_status() (righe 2713 fino a 2717 di /wp-includes/post.php in WordPress 3.0.1.) Nota che ce ne sono tre; usa quelli appropriati:
<?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);
}
La funzione wp_transition_post_status verrà chiamata, e questo attiverà l'azione "${new_status}_$post->post_type", quindi se un product passa allo stato publish, verrà attivata l'azione publish_product.