如果
update_post_meta
被解雇了,请检查meta_key
是否等于某事(如果使用特定的meta_key,我想触发一些代码)。如果我要查找的元密钥,请运行一些代码,该代码将需要知道要更新的元密钥的$post->ID
。上面的。任何人都可以给我提供一些示例代码来钩住
delete_post_meta
和update_post_meta
吗?#1 楼
从更通用的update_post_meta
函数调用update_metadata()
挂钩,因此您可能没有直接找到它。这三个钩子是:update_post_metadata
,一个过滤器,使您可以“劫持”元数据更新并执行其他操作。如果连接了一个返回布尔值的函数,则执行将在此处停止并返回布尔值。update_post_meta
,该操作在数据库中的数据更新之前被调用。updated_post_meta
,这是在数据库中更新数据后调用的操作。如果数据库中尚不存在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 );
}
}
#2 楼
除了从“编辑帖子”页面删除自定义元数据的情况外,“简”答案涵盖了以上内容。一旦您通过调用wp-admin / admin-ajax.php来单击元数据下的“删除”按钮,就会异步发生。不幸的是,该调用绕过了meta.php中的delete_metadata()
函数,而是调用了wp-admin / includes / post.php中的delete_meta()
(不要与wp-includes / post.php混淆)。 尽管仍然可以使用2个动作,分别是
delete_postmeta
(删除前)和deleted_postmeta
(删除后)。两者都接受单个参数$mid
,它是元数据的ID(不是密钥)。您可以使用以下方法检索元数据对象:$meta = get_post_meta_by_id($mid);
,它返回一个带有meta_id,post_id,meta_key和meta_value的对象。当然,在调用
deleted_postmeta
时,元数据已被删除,因此get_post_meta_by_id()
将无法工作(这会使该操作无效)。从“编辑帖子”页面更新自定义元数据也同样适用。 meta.php中的
update_metadata()
函数(及其动作)未调用,而wp-admin / includes / post.php中的update_meta()
函数却被调用。此处再次执行两个操作update_postmeta
和updated_postmeta
。 args是$ meta_id,$ post_id,$ meta_key,$ meta_value。
评论
超级谢谢。我知道使用update_metadata的update_post_meta,在那里,有关于add_post_meta和updated_post_meta的钩子,但是那是我所能得到的。我不知道该怎么用。但是现在我想我已经明白了:)
–斯科特
2011年5月10日12:34
更具体地说,挂钩已更新_ {$$ post_type} _meta
–本杰明·因塔尔(Benjamin Intal)
2015年8月8日在3:46
是否有可能挂钩到通过REST API更新后meta的位置?我想做到这样,当仅通过其余API更新发布元时,就会创建发布修订。
–阿姆贾德
20-2-13在18:52