web-development-kb-pt.site

Chamando uma função após a criação de nova postagem para um tipo de postagem personalizada do WordPress?

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?

7
dotty

Em functions.php:

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

Para mais e a documentação oficial, consulte aqui:

http://codex.wordpress.org/Post_Status_Transitions

5
Tom J Nowell

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

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.

2
Jan Fabry