WordPress Metabox сохраняет при обновлении или публикации, но не при сохранении черновика - PullRequest
2 голосов
/ 11 апреля 2011

Я создал пользовательские типы записей, которые также имеют собственные мета-ящики, которые я создал.В настоящее время они сохраняются при публикации или обновлении сообщения, но не сохраняются при внесении изменений в черновом режиме.

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.

1 Ответ

2 голосов
/ 12 апреля 2011

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;
}
...