rmlumley
  • 0
Новичок

Metabox сохраняет при обновлении или публикации, но не при сохранении черновика

  • 0

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

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_insert_post_data вместо save_post, но потом столкнулся с противоположной проблемой. На черновиках можно было сэкономить, но публикация поста уже не работала. Что мне нужно сделать по-другому, чтобы я мог обновить черновик (перед публикацией) и он сохранился?

Share
  1. Итак, вы сначала пытались подключиться wp_insert_post_data и могли сохранять метаданные при сохранении черновиков, но не при публикации. Затем вы пытались подключиться save_post и могли сохранять метаданные при публикации, но не при сохранении черновиков.

    Самым простым решением было бы подключиться к обоим.

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

    Редактировать

    Оба save_post и wp_insert_post_data вызываются одновременно и передают два параметра функциям обратного вызова. В исходнике это выглядит так:

    do_action('save_post', $post_ID, $post);
    do_action('wp_insert_post', $post_ID, $post);
    

    Но ваша функция не принимает никаких параметров. Это приведет return $post_ID к сбою и, вероятно, вызовет другие проблемы.

    Вы должны иметь:

    function save_details( $post_ID, $post ) {
        ...
    }
    

    И ваш крючок должен быть:

    add_action( 'save_post', 'save_details', 10, 2 );
    

    Это пройдет как в вашу функцию, так $post_ID и $post в вашу функцию, и все должно работать более гладко.

    • 0
  2. У меня была аналогичная проблема, которая, я думаю, была вызвана обновлением WordPress до 3.1, хотя у меня не было возможности вернуться назад, чтобы проверить. Я изменил свой код, чтобы передать $post_id и $post, как указано выше, позаботившись о передаче параметра 1,2, а не 10, 2, как указано выше, и это устранило проблему. добавление хука в wp_insert_post у меня не сработало и дало мне ошибки при добавлении нового пользовательского сообщения.

    Надеюсь, это поможет. Мой первый ответ, так что извините, если я неясен.

    • 0

Оставить ответ

You must login to add an answer.