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.