添加/更新帖子后的WordPress钩子和插入后的元素?

时间:2013-11-20 04:13:59

标签: wordpress hook custom-post-type

我有一个名为“视频”的自定义帖子类型,它还定义了一些自定义字段。创建或更新“视频”帖子后,我想运行一个函数。

不幸的是,这个函数需要我刚刚创建的帖子的post元数据的值,并且通常的钩子(save_postpublish_post等)似乎在之前运行post meta被插入到数据库中,因此它不可用。

如果我只是通过单击“发布”手动更新帖子而不进行任何更改,则功能正常。

在插入所有元数据后,是否有在此过程中稍后触发的挂钩?

2 个答案:

答案 0 :(得分:8)

有一个名为updated_post_meta无证件钩子可以满足我的需要。

它将4个参数传递给钩子函数:元ID,对象ID(与帖子ID相同),元键和元值。在我的钩子函数中,我检查元键名是否是我需要值的字段,如果是,则继续。

这是它的样子:

/**
 * Use value of post meta for something when the post 
 * meta changes
 * @param  integer $meta_id    ID of the meta data field
 * @param  integer $post_id    Post ID
 * @param  string $meta_key    Name of meta field
 * @param  string $meta_value  Value of meta field
 */
function saveYouTubeInfo($meta_id, $post_id, $meta_key='', 
                                             $meta_value=''){

    // Stop if not the correct meta key
    if ( $meta_key != 'my_meta_field_name') {
        return false;
    }

    // Function code goes here.
}

add_action('updated_post_meta', 'saveYouTubeInfo', 10, 4);

顺便说一句,与added_post_meta不同,您不会将post替换为您定位的帖子类型。在我的情况下,帖子类型的名称是videos,但我仍然必须使用updated_post_meta而不是updated_videos_meta

答案 1 :(得分:0)

post meta尚不可用的原因是因为它们使用save_post钩子来保存post meta。因此,在将帖子元保存到数据库后,您的挂钩未运行。

两种解决问题的方法。

  1. 从$ _POST获取数据

add_action('save_post','my_function');

function my_function($ post_id){

$postmeta = $_POST['field_name'];

}

  1. 为挂钩使用更高的优先级,因此它在保存帖子元之后运行

add_action('save_post','my_function',12,3);

function my_function($ post_id,$ post,$ update){

$postmeta = get_post_meta($post_id, 'meta_key', true);

}