¿Gancho de WordPress después de agregar/actualizar la publicación Y después de la inserción de la publicación meta?

3 minutos de lectura

avatar de usuario
chris herbert

Tengo un tipo de publicación personalizada llamada “videos”, que también tiene algunos campos personalizados definidos. Al crear o actualizar una publicación de “videos”, me gustaría ejecutar una función.

Desafortunadamente, esta función necesita los valores de los metadatos de la publicación que acabo de crear y los ganchos habituales (save_post,publish_postetc.) parecen ejecutarse antes de que la publicación meta se inserte en la base de datos, por lo que no está disponible.

Si actualizo manualmente la publicación simplemente haciendo clic en “Publicar” sin realizar ningún cambio, la función funciona correctamente.

¿Hay algún gancho que se active más adelante en el proceso, después de que se hayan insertado todos los metadatos?

  • porque no estas usando wp_insert_post ?? o wp_update_post ?

    – Obmerk Kronen

    20 de noviembre de 2013 a las 9:25


  • Los probé: también se disparan antes de que los metadatos se inserten en la base de datos.

    – Chris Herbert

    20 de noviembre de 2013 a las 15:04

avatar de usuario
chris herbert

Hay un indocumentado gancho llamado updated_post_meta eso hace lo que necesito.

Pasará 4 parámetros a la función enganchada: la ID meta, la ID del objeto (igual que la ID de la publicación), la clave meta y el valor meta. En mi función enganchada compruebo si el nombre de la clave meta es el campo del que necesito el valor y, si es así, continúa.

Esto es lo que parece:

/**
 * Use value of post meta for something when the post 
 * meta changes
 * @param  integer $meta_id    ID of the meta data field
 * @param  integer $post_id    Post ID
 * @param  string $meta_key    Name of meta field
 * @param  string $meta_value  Value of meta field
 */
function saveYouTubeInfo($meta_id, $post_id, $meta_key='', 
                                             $meta_value=""){

    // Stop if not the correct meta key
    if ( $meta_key != 'my_meta_field_name') {
        return false;
    }

    // Function code goes here.
}

add_action('updated_post_meta', 'saveYouTubeInfo', 10, 4);

Por cierto, a diferencia added_post_metano reemplazas post con el tipo de publicación al que te diriges. En mi caso, el nombre del tipo de publicación es videospero todavía tenía que usar updated_post_meta y no updated_videos_meta.

  • ¿Pueden revisar esta pregunta? stackoverflow.com/questions/38072130/…

    – Rituparna sonowal

    21 de mayo de 2017 a las 9:43


  • Encontré un problema similar y lo resolví usando la acción ‘added_post_meta’.

    – AlanP

    3 de julio de 2019 a las 13:08

La razón por la que el meta de la publicación aún no está disponible es porque usan el gancho save_post para guardar el meta de la publicación. Por lo tanto, su enlace no se está ejecutando después de que la publicación meta se guarde en la base de datos.

Dos soluciones a tu problema.

  1. Obtener los datos de $_POST

add_action(‘save_post’, ‘my_function’);

función mi_función($post_id){

$postmeta = $_POST['field_name'];

}

  1. Use una prioridad más alta para su enlace, de modo que se ejecute después de que se guarde el meta de la publicación

add_action(‘save_post’, ‘my_function’, 12 , 3);

función my_function($post_id, $post, $update){

$postmeta = get_post_meta($post_id, 'meta_key', true);

}

¿Ha sido útil esta solución?