Los update_post_meta
ganchos 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_meta
y added_post_meta
. Esto sucede antes de que lo update[d]_post_meta
llamen. 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_meta
hace ( no pasa primero una meta ID) .
delete_metadata()
tiene ganchos similares: delete_post_metadata
, delete_post_meta
y 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_meta
usoupdate_metadata
y allí había ganchosadded_post_meta
yupdated_post_meta
eso era lo más lejos que podía llegar. No entendí cómo usarlo. Pero ahora creo que lo tengo :)updated_{$post_type}_meta
La 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_postmeta
se 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_postmeta
yupdated_postmeta
. Los argumentos son $ meta_id, $ post_id, $ meta_key, $ meta_value.fuente