Llamar a una función después de crear una nueva entrada para un tipo de entrada personalizado en WordPress
Supongamos que he creado un nuevo tipo de entrada 'product'
. ¿Existe alguna forma de ejecutar una función (creada por el usuario) cuando se cree esta nueva entrada 'product'
?

En functions.php:
function mynewproduct(){
myfunction();
}
add_action( 'new_product', 'mynewproduct' );
Para más información y la documentación oficial, consulta aquí:

Hola @dotty:
Revisa 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. Nota que WordPress usa esta función tanto para agregar como para actualizar entradas.)
Al final tiene el siguiente código. Desde este código puedes identificar la llamada a wp_transition_post_status()
(más sobre eso en un momento) y tenemos los hooks de acción edit_post
, post_updated
, save_post
y wp_insert_post
(francamente no sé por qué tenemos los dos últimos en lugar de solo uno.) Puedes usar cualquiera de ellos que sea apropiado para tus 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 mencionó @Jan Fabry, están los hooks de acción que se encuentran en wp_transition_post_status()
(en las líneas 2713 a 2717 de /wp-includes/post.php
en WordPress 3.0.1.) Nota que hay tres; usa el que sea apropiado:
<?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 función wp_transition_post_status
será llamada, y esto disparará la acción "${new_status}_$post->post_type"
, así que si un product
pasa al estado publish
, se disparará la acción publish_product
.
