我创建了自定义帖子类型,这些帖子类型也包含我创建的自定义元数据集。目前,当我发布或更新帖子时,它们会保存,但是当我处于草稿模式进行更改时,它们不会保存。
add_action('save_post', 'save_details');
function save_details($post_id){
global $post;
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return $post_id;
}
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_insert_post_data而不是save_post,但后来遇到了相反的问题。它可以节省草稿,但发布帖子不再有效。我尝试同时调用两个,同样的问题。我需要做些什么,以便我可以更新草稿(在发布之前),它会保存?在我切换到3.1之前,我很确定这工作正常。
答案 0 :(得分:2)
save_post
无论是什么,无论是草稿还是已发布的帖子都会被调用,所以我很惊讶这是行不通的。我确实看到你的代码有些奇怪。
考虑到你有$post_ID
,我赞成在全球$post
上使用它。另外,我更喜欢以下检测自动草稿的方法(我直接从wp-includes / post.php中删除它,我更喜欢检查Wordpress代码库并尽可能模拟它们的方法)。
请尝试以下重构代码,如果这可以解决您的问题,请与我们联系。
add_action("save_post", "save_details");
function save_details($post_ID = 0) {
$post_ID = (int) $post_ID;
$post_type = get_post_type( $post_ID );
$post_status = get_post_status( $post_ID );
if ( "events" == $post_type && "auto-draft" != $post_status ) {
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"]);
}
return $post_ID;
}