Эти update_post_meta
крючки вызываются из более общей update_metadata()
функции, так что вы не могли бы найти его непосредственно. Три крючка:
update_post_metadata
фильтр, который позволяет «захватить» обновление метаданных и сделать что-то еще. Если вы подключите функцию, которая возвращает логическое значение, выполнение на этом останавливается и возвращается логическое значение.
update_post_meta
, Это действие , которое вызывается прежде , чем данные обновляются в базе данных.
updated_post_meta
, Это действие , которое вызывается после того, как данные обновляются в базе данных.
Если ключ мета не существует в базе данных еще, update_metadata()
передает управление add_metadata()
, которое имеет аналогичные крючки add_post_metadata
, add_post_meta
и added_post_meta
. Это происходит до того, как update[d]_post_meta
будет вызван. Так что если вы хотите сделать что - то , когда ключ мета добавляется или обновляется, убедитесь , что крюк в обоих update*
и на add*
крючках - но обратите внимание , что в то время как updated_*
и added_*
действия проходят аналогичные параметры, update_*
а add_*
не ( add_post_meta
не проходит мета ID первого) ,
delete_metadata()
имеет аналогичные крючки: delete_post_metadata
, delete_post_meta
и deleted_post_meta
.
Образец кода:
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
использованииupdate_metadata
и там, там были крючки,added_post_meta
иupdated_post_meta
это все, насколько я мог получить. Я не понял, как использовать. Но теперь я думаю, что у меня это получилось :)updated_{$post_type}_meta
Ян ответ охватывает в значительной степени это выше, за исключением случая, когда пользовательские метаданные удаляются со страницы редактирования сообщения. Это происходит асинхронно, как только вы нажимаете кнопку «Удалить» под метаданными, через вызов wp-admin / admin-ajax.php. К сожалению, эти вызовы обходят
delete_metadata()
функцию в meta.php и вместо этого вызываютdelete_meta()
в wp-admin / includes / post.php (не путать с wp-include / post.php).Тем не менее, есть 2 действия, которые можно использовать
delete_postmeta
(до удаления) иdeleted_postmeta
(после удаления). Оба принимают один параметр$mid
, который является идентификатором метаданных (а не ключом). Вы можете получить объект метаданных, используя:который возвращает объект с meta_id, post_id, meta_key abd meta_value. Конечно, к моменту
deleted_postmeta
вызова метаданные были удалены, поэтомуget_post_meta_by_id()
они не будут работать (что делает это действие бесполезным)То же самое касается обновления пользовательских метаданных со страницы редактирования сообщения.
update_metadata()
Функция (и его действия) в meta.php это не называется, ноupdate_meta()
функция в WP-администратора / включает / post.php вместо этого. Здесь снова два действия,update_postmeta
иupdated_postmeta
. Аргументы: $ meta_id, $ post_id, $ meta_key, $ meta_value.источник