it-swarm-es.com

¿Llamar a una función después de la creación de una nueva publicación para un tipo de publicación personalizada de WordPress?

Supongamos que he creado un nuevo tipo de publicación 'product'. ¿Hay alguna forma de realizar una función (creada por el usuario) cuando se ha creado esta nueva publicación 'product'?

7
dotty

En functions.php:

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

Para más y la documentación oficial, consulte aquí:

http://codex.wordpress.org/Post_Status_Transitions

5
Tom J Nowell

Hola @dotty:

Eche un vistazo al final de la función wp_insert_post() en el archivo /wp-includes/post.php (en las líneas 2148 a 2392 en WordPress 3.0.1. Tenga en cuenta que WordPress usa esta función para agregar y actualizar publicaciones. )

Al final tiene el siguiente código. Desde este código puede identificar la llamada a wp_transition_post_status() (más sobre esto en un momento) y tenemos los ganchos de acción edit_post, post_updated, save_post y wp_insert_post ( francamente, no sé por qué tenemos estos dos últimos en lugar de uno. ) Puede usar cualquiera de los que sean apropiados para sus necesidades:

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

Y como @Jan Fabry mencionó, existen los ganchos de acción que se encuentran en wp_transition_post_status() (del 2713 al 2717 de /wp-includes/post.php en WordPress 3.0.1.) Note que hay tres de ellos; utilizar según corresponda:

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

Se llamará a la función wp_transition_post_status , y esto activará la acción "${new_status}_$post->post_type", por lo que si product se mueve al estado publish, la acción publish_product se activará.

2
Jan Fabry