2

我创建了自定义帖子类型,这些帖子类型也具有我创建的自定义 meta_boxes。目前,当我发布或更新帖子时它们会保存,但当我处于草稿模式进行更改时它们不会保存。

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 之前,我很确定这可以正常工作。

4

1 回答 1

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;
}
于 2011-04-12T16:31:00.467 回答