我有一个名为“视频”的自定义帖子类型,它还定义了一些自定义字段。创建或更新“视频”帖子后,我想运行一个函数。
不幸的是,这个函数需要我刚刚创建的帖子的post元数据的值,并且通常的钩子(save_post
,publish_post
等)似乎在之前运行post meta被插入到数据库中,因此它不可用。
如果我只是通过单击“发布”手动更新帖子而不进行任何更改,则功能正常。
在插入所有元数据后,是否有在此过程中稍后触发的挂钩?
答案 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。因此,在将帖子元保存到数据库后,您的挂钩未运行。
两种解决问题的方法。
add_action('save_post','my_function');
function my_function($ post_id){
$postmeta = $_POST['field_name'];
}
add_action('save_post','my_function',12,3);
function my_function($ post_id,$ post,$ update){
$postmeta = get_post_meta($post_id, 'meta_key', true);
}