【问题标题】:WordPress hook after adding/updating post AND after insertion of post meta?添加/更新帖子和插入帖子元后的WordPress挂钩?
【发布时间】:2013-12-03 22:19:03
【问题描述】:

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

不幸的是,这个函数需要我刚刚创建的帖子的帖子元数据的值,并且通常的挂钩(save_postpublish_post 等)似乎在帖子元插入之前运行进入数据库,所以它不可用。

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

在插入所有元数据之后,是否有一个钩子会在该过程的后期触发?

【问题讨论】:

  • 为什么你不使用wp_insert_post ??或wp_update_post ?
  • 我已经尝试过了——它们也会在元数据插入数据库之前触发。

标签: wordpress hook custom-post-type


【解决方案1】:

有一个名为 updated_post_metaundocumented 钩子可以满足我的需要。

它将向挂钩函数传递 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

【讨论】:

【解决方案2】:

post meta 不可用的原因是因为他们使用 save_post hook 来保存 post meta。因此,在将 post meta 保存到数据库后,您的钩子不会运行。

解决您的问题的两种方法。

  1. 从 $_POST 获取数据

add_action('save_post', 'my_function');

函数 my_function($post_id){

$postmeta = $_POST['field_name'];

}

  1. 为您的钩子使用更高的优先级,以便在保存帖子元数据后运行

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

函数 my_function($post_id, $post, $update){

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2015-07-22
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多