Esta es el arreglo más completa que te podemos aportar, pero estúdiala pausadamente y analiza si es compatible a tu trabajo.
El update_post_meta
los ganchos se llaman desde el más genérico update_metadata()
función, por lo que es posible que no la 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 booleano, la ejecución se detiene allí y se devuelve el booleano.update_post_meta
, una acción que se llama antes de los datos se actualizan en la base de datos.updated_post_meta
, una acción que se llama después los datos se actualizan en la base de datos.
Si el meta key aún no existía en la base de datos, update_metadata()
pasa el control a add_metadata()
, que tiene los ganchos similares add_post_metadata
, add_post_meta
, y added_post_meta
. esto pasa antes update[d]_post_meta
se llama Entonces, si quieres hacer algo cuando el meta key está agregado o actualizado, asegúrese de conectarse tanto a la update*
y el add*
ganchos – pero observe que mientras el updated_*
y added_*
las acciones pasan parámetros similares, update_*
y add_*
no (add_post_meta
no pasa una meta ID primero).
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 );
La respuesta de enero cubre prácticamente todo lo anterior, excepto en el caso de que se elimine un metadato personalizado de la página Editar publicación. Esto sucede de forma asincrónica 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 pasan por alto el delete_metadata()
función en meta.php y llamadas delete_meta()
en wp-admin/includes/post.php en su lugar (no confundir con wp-includes/post.php).
Sin embargo, hay 2 acciones que aún se pueden usar, delete_postmeta
(antes de la eliminación), y deleted_postmeta
(después de la eliminación). Ambos aceptan un solo parámetro. $mid
, que es el ID de los metadatos (no el key). Puede recuperar el objeto de metadatos usando:
$meta = get_post_meta_by_id($mid);
que devuelve un objeto con meta_id, post_id, meta_key abd meta_value. Por supuesto, para el momento deleted_postmeta
se llama los metadatos se han eliminado por lo que get_post_meta_by_id()
no funcionará (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. El update_metadata()
función (y sus acciones) en meta.php es no llamado, pero el update_meta()
la función en wp-admin/includes/post.php es en su lugar. Dos acciones de nuevo aquí, update_postmeta
y updated_postmeta
. Los argumentos son $meta_id, $post_id, $meta_key, $meta_value.
Nos puedes corroborar nuestro análisis añadiendo un comentario y dejando una puntuación te damos la bienvenida.