如何挂接更新POST_META和DELETE_POST_META?

时间:2011-05-10 作者:Scott

我仍在努力让我的头脑适应这一切,所以我真的在努力完成以下任务:

如果update_post_meta 然后检查meta_key 等于(如果使用特定的meta\\u键,我想触发一些代码)。如果我正在寻找的元密钥,那么运行一些需要知道$post->ID 正在更新的元密钥的。

我需要挂上delete_post_meta 同样,这种情况与上述情况相反。

谁能给我提供一些示例代码update_post_metadelete_post_meta?

2 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

这个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_metadeleted_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 );
    }
}

SO网友:sebastien.b

Jan answer几乎涵盖了以上内容,但从编辑帖子页面删除自定义元数据的情况除外。只要您通过调用wp admin/admin ajax单击元数据下的“Delete”按钮,就会异步发生这种情况。php。不幸的是,这调用绕过delete_metadata() meta中的函数。php和调用delete_meta() 在wp admin/includes/post中。而不是php(不要与wp includes/post.php混淆)。

但仍有2个操作可以使用,delete_postmeta (删除前),以及deleted_postmeta (删除后)。两者都接受单个参数$mid, 它是元数据的ID(不是键)。可以使用以下方法检索元数据对象:

$meta = get_post_meta_by_id($mid);  
它返回一个具有meta\\u id、post\\u id、meta\\u key和meta\\u value的对象。当然,到时候deleted_postmeta 被称为元数据已被删除,因此get_post_meta_by_id() 行不通(这有点让这个动作没用)

从编辑帖子页面更新自定义元数据也是如此。这个update_metadata() 元中的函数(及其动作)。php不是调用的,而是update_meta() wp admin/includes/post中的功能。相反,php是。这里又有两个动作,update_postmetaupdated_postmeta. 参数是$meta\\u id、$post\\u id、$meta\\u key、$meta\\u value。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴