Suponha que criei um novo tipo de mensagem 'product'
. Existe uma maneira de executar uma função (criada pelo usuário) quando esta nova postagem do 'product'
foi criada?
Em functions.php:
function mynewproduct(){
myfunction();
}
add_action( 'new_product', 'mynewproduct' );
Para mais e a documentação oficial, consulte aqui:
Oi @dotty:
Dê uma olhada no final da função wp_insert_post()
no arquivo /wp-includes/post.php
(nas linhas 2148 até 2392 no WordPress 3.0.1. Observe que o WordPress usa essa função para adicionar e atualizar posts. )
No final, tem o seguinte código. A partir desse código você pode identificar a chamada para wp_transition_post_status()
(mais sobre isso daqui a pouco) e temos os ganchos de ação edit_post
, post_updated
, save_post
e wp_insert_post
( francamente, não sei por que temos os dois últimos em vez de apenas Um. ) Você pode usar qualquer um que seja apropriado para suas necessidades:
<?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 como @Jan Fabry mencionado existem os ganchos de ação encontrados em wp_transition_post_status()
(em 2713 a 2717 de /wp-includes/post.php
no WordPress 3.0.1.) Observe que há três deles; usar conforme apropriado:
<?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);
}
A função wp_transition_post_status
será chamada, e isso irá disparar a ação "${new_status}_$post->post_type"
, então se uma product
passar para o estado publish
, a ação publish_product
será acionada.