Los update_post_metaganchos se llaman desde la update_metadata()función más genérica , por lo que es posible que no lo haya encontrado directamente. Los tres ganchos son:
update_post_metadata, un filtro que le permite "secuestrar" la actualización de metadatos y hacer otra cosa. Si conecta una función que devuelve un valor booleano, la ejecución se detiene allí y se devuelve el valor booleano.
update_post_meta, una acción que se llama antes de que los datos se actualicen en la base de datos.
updated_post_meta, una acción que se llama después de que los datos se actualizan en la base de datos.
Si la tecla meta no existía en la base de datos, sin embargo, update_metadata()pasa el control add_metadata(), que tiene los ganchos similares add_post_metadata, add_post_metay added_post_meta. Esto sucede antes de que lo update[d]_post_metallamen. Por lo tanto, si desea hacer algo cuando se agrega o actualiza la meta clave , asegúrese de engancharse en update*los add*ganchos y en los ganchos, pero tenga en cuenta que mientras las acciones updated_*y added_*pasan parámetros similares, update_*y add_*no lo add_post_metahace ( no pasa primero una meta ID) .
delete_metadata()tiene ganchos similares: delete_post_metadata, delete_post_metay deleted_post_meta.
Código de muestra:
add_action( 'added_post_meta', 'wpse16835_after_post_meta', 10, 4 );
add_action( 'updated_post_meta', 'wpse16835_after_post_meta', 10, 4 );
function wpse16835_after_post_meta( $meta_id, $post_id, $meta_key, $meta_value )
{
if ( 'wpse16835_meta_key' == $meta_key ) {
wpse16835_do_something( $post_id, $meta_value );
}
}
add_action( 'deleted_post_meta', 'wpse16835_deleted_post_meta', 10, 4 );
function wpse16835_deleted_post_meta( $deleted_meta_ids, $post_id, $meta_key, $only_delete_these_meta_values )
{
if ( 'wpse16835_meta_key' == $meta_key ) {
wpse16835_undo_something( $post_id );
}
}
update_post_metausoupdate_metadatay allí había ganchosadded_post_metayupdated_post_metaeso era lo más lejos que podía llegar. No entendí cómo usarlo. Pero ahora creo que lo tengo :)updated_{$post_type}_metaLa respuesta de Jan cubre casi todo lo anterior, excepto en el caso de que se eliminen metadatos personalizados de la página Editar publicación. Esto sucede de forma asíncrona tan pronto como hace clic en el botón "Eliminar" debajo de los metadatos, a través de una llamada a wp-admin / admin-ajax.php. Desafortunadamente, esas llamadas omiten la
delete_metadata()función en meta.php y las llamadasdelete_meta()en wp-admin / includes / post.php (no deben confundirse con wp-includes / post.php).Sin embargo, todavía se pueden usar 2 acciones
delete_postmeta(antes de la eliminación) ydeleted_postmeta(después de la eliminación). Ambos aceptan un único parámetro$mid, que es la ID de los metadatos ( no la clave). Puede recuperar el objeto de metadatos usando:que devuelve un objeto con meta_id, post_id, meta_key y meta_value. Por supuesto, para cuando
deleted_postmetase llama, los metadatos se han eliminado, porget_post_meta_by_id()lo que no funcionarán (lo que hace que esa acción sea inútil)Lo mismo ocurre con la actualización de metadatos personalizados desde la página Editar publicación. La
update_metadata()función (y sus acciones) en meta.php es no llaman, pero laupdate_meta()función en wp-admin / includes / post.php es su lugar. Dos acciones nuevamente aquí,update_postmetayupdated_postmeta. Los argumentos son $ meta_id, $ post_id, $ meta_key, $ meta_value.fuente