cuál es la forma correcta de enganchar cuando se actualiza la publicación

14

trato de enganchar cuando se actualiza la publicación pero todos los enganches que intento nunca se ejecutan, excepto updated_post_meta

add_action('updated_post_meta', 'my_function');

function my_function($post_id) {    
    echo 'This is my post ID : '.$post_id;
}

He intentado este add_action('save_post', 'my_function'); pero no se ha hecho eco de la identificación, o tal vez este mensaje ya tiene eco pero nunca se procesa porque se envía el encabezado de redireccionamiento.

    
pregunta rusly 14.02.2014 - 17:23

2 respuestas

40

Cuando se actualiza una publicación, hay algunos enlaces que se activan:

  • 'pre_post_update' es una acción activada justo antes de que la publicación se actualice, el argumento pasado son 2: $post_ID y $data que es una matriz de todos las otras columnas de la base de datos de la tabla de publicaciones
  • 'transition_post_status' es un gancho activado en la actualización, y pasa 3 argumentos: $ new_post_status, $old_post_status y $post (objeto).
  • Luego, hay otros 2 ganchos de transición activados, pero se denominan dinámicamente, lo que significa que la acción efectiva activada depende del estado anterior y nuevo de la publicación. "{$old_status}_to_{$new_status}" y "{$new_status}_{$post->post_type}" . Primero pase el único objeto de publicación como argumento, el segundo pase la identificación de publicación y el objeto de publicación. Encuentre la documentación aquí .
  • 'edit_post' que pasan 2 argumentos: $post_ID y $post (objeto)
  • 'post_updated' que pasan 3 argumentos: $post_ID , $post_after (publicar objeto después de la actualización), $post_before (publicar objeto antes de la actualización)
  • Otro enlace dinámico: "save_post_{$post->post_type}" que depende del tipo de publicación, por ejemplo. para publicaciones estándar es 'save_post_post' y para páginas es 'save_post_page' , este gancho pasa 3 argumentos: $post_ID , $post (objeto) y $update que es un booleano (verdadero o falso) que es verdadero cuando se realiza una actualización, de hecho, este enlace se activa también cuando se guarda una publicación por primera vez.
  • ' save_post ' que se activa tanto en la actualización como en el primer guardado, y pasa los mismos 3 argumentos del enganche anterior.
  • ' save_post_{$post_type} ' que se activa tanto en la actualización como en el primer guardado, y pasa los mismos 2 primeros argumentos del enganche anterior.
  • Finalmente tiene ' wp_insert_post ' , que se activa tanto en la actualización como en el primer guardado, y pasa los mismos 3 argumentos de los 2 ganchos anteriores.

Estos enlaces se activan cada vez que se actualiza una publicación, tanto a través de las páginas de administración en el backend como a través de la actualización "manualmente" usando wp_update_post o wp_insert_post .

Cuando la publicación se actualiza utilizando páginas de administración, se activan enlaces adicionales, un ejemplo es 'update_post_redirect' o 'post_updated_messages' . (Consulte esto y esto respuestas WPSE para ejemplos de uso).

Tenga en cuenta que si desea hacer uso de algún argumento enganche, no es el primero, debe declararlo explícitamente en add_action call.

Por ejemplo, Si desea usar el argumento '$update' (que es el 3er) del enganche 'save_post' , necesita agregar 3 como $accepted_args param en add_action (see docs ):

// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) {
  $msg = 'Is this un update? ';
  $msg .= $update ? 'Yes.' : 'No.';
  wp_die( $msg );
}

Última nota relacionada con timing : debe asegurarse de que add_action se llame antes de que se active la acción, o no hará nada.

Por ejemplo, este código:

wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );

no hará nada, porque la acción se agregará después de que se haya disparado el gancho. Aquí es fácil reconocerlo, en el mundo real el código no siempre es así.

    
respondido por el gmazzap 14.02.2014 - 18:08
1

¿Por qué no enganchar en post_updated_messages . De esa manera, puede mostrar este mensaje como la publicación de wordpress predeterminada actualizada.

add_filter('post_updated_messages', 'your_message');

function your_message(){
}

Busca un ejemplo aquí:

enlace

bajo post_updated_messages

    
respondido por el Jacob Rambo 14.02.2014 - 17:39

Lea otras preguntas en las etiquetas