Os update_post_meta
ganchos são chamados a partir da update_metadata()
função mais genérica , portanto você pode não encontrá-lo diretamente. Os três ganchos são:
update_post_metadata
, um filtro que permite "seqüestrar" a atualização de metadados e fazer outra coisa. Se você conectar uma função que retorne um booleano, a execução será interrompida e o booleano será retornado.
update_post_meta
, uma ação que é chamada antes que os dados sejam atualizados no banco de dados.
updated_post_meta
, uma ação que é chamada depois que os dados são atualizados no banco de dados.
Se a tecla meta não existe na base de dados, no entanto, update_metadata()
passa o controlo para add_metadata()
, que tem os ganchos semelhantes add_post_metadata
, add_post_meta
e added_post_meta
. Isso acontece antes de update[d]_post_meta
ser chamado. Então, se você quer fazer algo quando a tecla meta é adicionado ou atualizado, certifique-se de ligar para ambos os update*
e os add*
ganchos - de notar que, enquanto o updated_*
e added_*
acções passar parâmetros semelhantes, update_*
e add_*
não ( add_post_meta
não passa um ID meta em primeiro lugar) .
delete_metadata()
tem ganchos semelhantes: delete_post_metadata
, delete_post_meta
e deleted_post_meta
.
Código de amostra:
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
e lá, havia ganchos paraadded_post_meta
e,updated_post_meta
mas isso é tanto quanto eu poderia conseguir. Não entendi como usar. Mas agora eu acho que eu tenho que :)updated_{$post_type}_meta
A resposta de Jan aborda praticamente a questão acima, exceto no caso em que um metadado personalizado é excluído da página Editar postagem. Isso acontece de forma assíncrona assim que você clica no botão "Excluir" abaixo dos metadados, através de uma chamada para wp-admin / admin-ajax.php. Infelizmente, essas chamadas ignoram a
delete_metadata()
função no meta.php e chamadelete_meta()
wp-admin / includes / post.php (não deve ser confundido com wp-includes / post.php).Existem 2 ações que ainda podem ser usadas
delete_postmeta
(antes da exclusão) edeleted_postmeta
(após a exclusão). Ambos aceitam um único parâmetro$mid
, que é o ID dos metadados ( não a chave). Você pode recuperar o objeto de metadados usando:que retorna um objeto com meta_id, post_id, meta_key e meta_value. Obviamente, quando
deleted_postmeta
os metadados são excluídos, eles são excluídos e, portantoget_post_meta_by_id()
, não funcionam (o que meio que torna essa ação inútil)O mesmo vale para a atualização de metadados personalizados na página Editar postagem. A
update_metadata()
função (e suas ações) no meta.php não é chamada, mas aupdate_meta()
função no wp-admin / includes / post.php. Duas ações novamente aqui,update_postmeta
eupdated_postmeta
. Os argumentos são $ meta_id, $ post_id, $ meta_key, $ meta_value.fonte