Metabox在更新或发布时保存,但在保存草稿时不保存

时间:2011-04-06 作者:rmlumley

我已经创建了自定义帖子类型,其中也包含我创建的自定义meta\\u框。目前,当我发布或更新帖子时,它们会保存,但当我在草稿模式下进行更改时,它们不会保存。

add_action(\'save_post\', \'save_details\');

function save_details(){
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE ) {
    return $post_id;
}
global $post;
if ($post->post_type == \'events\') { // Check to see if Event Type.
    update_post_meta($post->ID, "event_featuring", $_POST["event_featuring"]);
    update_post_meta($post->ID, "event_time", $_POST["event_time"]);
    update_post_meta($post->ID, "event_date", $_POST["event_date"]);
    update_post_meta($post->ID, "event_end_date", $_POST["event_end_date"]);
    update_post_meta($post->ID, "event_location", $_POST["event_location"]);
    update_post_meta($post->ID, "empid", $_POST["empid"]);
    update_post_meta($post->ID, "bhs_event", $_POST["bhs_event"]);
}
}
我尝试使用wp\\u insert\\u post\\u数据而不是save\\u post,但后来遇到了相反的问题。这样可以节省草稿,但发布帖子不再有效。我需要做些什么才能更新草稿(在发布之前)并将其保存?

2 个回复
SO网友:EAMann

所以你第一次尝试wp_insert_post_data 并且可以在保存草稿时保存元数据,但在发布时无法保存。然后你试着save_post 并且可以在发布时保存元数据,但在保存草稿时不能。

最简单的解决方案是将两者结合起来。

add_action(\'save_post\', \'save_details\');
add_action(\'wp_insert_post_data\', \'save_details\');
编辑两者save_postwp_insert_post_data 同时调用,并将两个参数传递给回调函数。在源代码中,它如下所示:

do_action(\'save_post\', $post_ID, $post);
do_action(\'wp_insert_post\', $post_ID, $post);
b但函数不接受任何参数。这将使return $post_ID 失败,并可能导致其他问题。

您应该具备:

function save_details( $post_ID, $post ) {
    ...
}
你的钩子应该是:

add_action( \'save_post\', \'save_details\', 10, 2 );
这将通过两个$post_ID$post 并且应该使事情运行得更顺畅一些。

SO网友:Manish

我遇到了一个类似的问题,我想这是由于将wordpress升级到3.1引起的,尽管我没有机会返回验证。我将代码更改为如上所述传入$post\\u id和$post,并注意传递参数1,2,而不是如上所述的10,2,这解决了问题。在wp\\u insert\\u post中添加挂钩对我不起作用,并且在添加新的自定义帖子时给了我错误。

希望这有帮助。如果我不清楚,我的第一反应很抱歉。

结束