Ejecutar acción después de guardar una entrada con todos sus registros post_meta (datos)
Tengo que ejecutar código PHP personalizado después de que se guarde una nueva entrada con todos sus meta datos.
Mi pregunta es ¿cómo lograr esto? Probé con la acción save_post, pero se ejecuta antes de que se guarden los registros meta, así que no puedo usarla en este caso.
Entonces, ¿cómo puedo ejecutar mi función personalizada después de que la entrada con todos los datos relacionados se haya guardado en la base de datos?
ACTUALIZACIÓN: Intenté lograrlo con el siguiente código en el archivo functions.php:
add_action( 'save_post', 'wpse41912_save_post' );
function wpse41912_save_post() {
// obtener información sobre la última entrada añadida
$args = array( 'numberposts' => '1', 'post_type' => 'post' );
$recent_posts = wp_get_recent_posts( $args );
$myFunc_latest_id = $recent_posts[0]['ID']; // id de la última entrada
$myFunc_post_details = get_post($myFunc_latest_id);
print_r($myFunc_post_details);
// ¿cómo ejecutar código php cuando se haya añadido todo el post meta?
}
¡Gracias de antemano!

Para el tipo de entrada NUEVO 'post' usa el hook de acción draft_to_publish
:
function fpw_post_info( $post ) {
if ( 'post' == $post->post_type ) {
// echo '<pre>'; print_r( $post ); echo '<br />';
// $meta = get_post_meta( $post->ID ); print_r( $meta ); echo '</pre>'; die();
// tu código personalizado va aquí...
}
}
add_action( 'draft_to_publish', 'fpw_post_info', 10, 1 );
En tu función de callback $post
es tu entrada como objeto WP_post
. Obtendrás los metadatos de la entrada llamando a la función get_post_meta
.
Para entradas NUEVAS o ACTUALIZADAS del tipo 'post' usa el hook de acción publish_post
:
function fpw_post_info( $id, $post ) {
// echo '<pre>'; print_r( $post ); echo '<br />';
// $meta = get_post_meta( $post->ID ); print_r( $meta ); echo '</pre>'; die();
// tu código personalizado va aquí...
}
add_action( 'publish_post', 'fpw_post_info', 10, 2 );
¡En este caso la función de callback toma dos parámetros!

Gracias, pero no pasa nada al usar el gancho de acción publish_post... También intenté usar el gancho added_post_meta pero se ejecuta después de cada meta añadida al post - necesito el que se ejecute después del último meta añadido

¿Qué quieres decir con que no pasa nada? ¿Usaste el código anterior sin descomentar los primeros dos comentarios? ¿Muéstrame tu código? ¿Lo usas para un tipo de entrada personalizado o solo para 'post'?

Lee la respuesta actualizada para el uso correcto del gancho de acción publish_post
.

Podrías usar esto:
function miFuncion($post_id, $post, $update) {
// tu código aquí
}
add_action('save_post', 'miFuncion');
$update
es un booleano que devuelve false si es una entrada nueva. Si es una actualización, devuelve true.
Aquí está la documentación: https://developer.wordpress.org/reference/hooks/save_post/

La respuesta correcta y más simple es utilizar la acción wp_insert_post
.
https://developer.wordpress.org/reference/hooks/wp_insert_post/
Una distinción importante de la acción wp_insert_post es que se activa después de que se haya llamado a update_post_meta.
Hay 3 parámetros disponibles - la bandera $update te indica si es un post nuevo o actualizado.
add_action('wp_insert_post', 'run_after_post_updated', 10, 3);
function run_after_post_updated($post_ID, $post = null, $update = true) {
//aunque la documentación dice 3 parámetros, parece que a veces solo se pasa el postid - por lo que necesitas valores por defecto para los otros 2 parámetros
$meta = get_post_meta( $post_ID );
// ...
}
