Llamar a una función después de crear una nueva entrada para un tipo de entrada personalizado en WordPress

6 sept 2010, 15:57:09
Vistas: 15.3K
Votos: 8

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

1
Comentarios

@dotty: ¿Te ayudó alguna de estas respuestas a resolver tu problema? Si es así, por favor vótalas positivamente para agradecer a las personas que te ayudaron, y selecciona la mejor respuesta para que tu pregunta no permanezca en la lista de "sin responder".

MikeSchinkel MikeSchinkel
10 sept 2010 23:32:47
Todas las respuestas a la pregunta 3
2

En functions.php:

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

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

http://codex.wordpress.org/Post_Status_Transitions

7 sept 2010 15:15:50
Comentarios

No creo que new_{post_type} funcione porque el status en la acción {status}_{post_type} nunca se establecerá como new.

Spencer Spencer
8 jul 2015 05:24:12

En este caso, es importante entender qué se entiende por 'creado'

Tom J Nowell Tom J Nowell
8 jul 2015 15:33:50
0

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);
}
7 sept 2010 04:55:24
2

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.

6 sept 2010 16:12:01
Comentarios

¿Entonces asigno mi función a la acción publish_product?

dotty dotty
6 sept 2010 16:48:13

@dotty: Puedes hacer eso, pero si un usuario crea un producto pero aún no hace clic en "Publicar", este hook no se activará. Esto puede o no ser lo que deseas.

Jan Fabry Jan Fabry
6 sept 2010 18:09:19