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_post
etc.) 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?
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_meta
no reemplazas post
con el tipo de publicación al que te diriges. En mi caso, el nombre del tipo de publicación es videos
pero 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.
- Obtener los datos de $_POST
add_action(‘save_post’, ‘my_function’);
función mi_función($post_id){
$postmeta = $_POST['field_name'];
}
- 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);
}
porque no estas usando
wp_insert_post
?? owp_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