Wordpress add_meta_box () странность

Код ниже работает почти безупречно, однако мое значение для названия страницы на одной из моих страниц продолжает подходить пустое после нескольких обновлений страницы... Это придерживается некоторое время, затем это, кажется, сбрасывает для освобождения. Я думаю, что у меня должен быть конфликт в коде ниже, но я не могу вполне изобразить его.

Я позволяю пользователю устанавливать пользовательское название страницы для сообщений, а также страниц через пользовательское "поле ввода сообщения/названия страницы). Кто-либо может видеть очевидную проблему здесь, которая могла бы сбрасывать название страницы для очищения?

// ===================
// = POST OPTION BOX =
// ===================

add_action('admin_menu', 'my_post_options_box');

function my_post_options_box() {
    if ( function_exists('add_meta_box') ) { 
      //add_meta_box( $id, $title, $callback, $page, $context, $priority );
        add_meta_box('post_header', 'Custom Post Header Code (optional)', 'custom_post_images', 'post', 'normal', 'low');
        add_meta_box('post_title', 'Custom Post Title', 'custom_post_title', 'post', 'normal', 'high');
        add_meta_box('post_title_page', 'Custom Post Title', 'custom_post_title', 'page', 'normal', 'high');
        add_meta_box('postexcerpt', __('Excerpt'), 'post_excerpt_meta_box', 'page', 'normal', 'core');
        add_meta_box('categorydiv', __('Page Options'), 'post_categories_meta_box', 'page', 'side', 'core');
    }
}

//Adds the custom images box
function custom_post_images() {
    global $post;
    ?>
    <div class="inside">
        <textarea style="height:70px; width:100%;margin-left:-5px;" name="customHeader" id="customHeader"><?php echo get_post_meta($post->ID, 'customHeader', true); ?></textarea>
        <p>Enter your custom html code here for the post page header/image area. Whatever you enter here will override the default post header or image listing <b>for this post only</b>. You can enter image references like so &lt;img src='wp-content/uploads/product1.jpg' /&gt;. To show default images, just leave this field empty</p>
    </div>
<?php
}

//Adds the custom post title box
function custom_post_title() {
    global $post;
    ?>
    <div class="inside">
        <p><input style="height:25px;width:100%;margin-left:-10px;" type="text" name="customTitle" id="customTitle" value="<?php echo get_post_meta($post->ID, 'customTitle', true); ?>"></p>
        <p>Enter your custom post/page title here and it will be used for the html &lt;title&gt; for this post page and the Google link text used for this page.</p>
    </div>
<?php
}


add_action('save_post', 'custom_add_save');

function custom_add_save($postID){
    if (!defined('DOING_AUTOSAVE') && !DOING_AUTOSAVE) {
        return $postID;
    }
    else
    {
        // called after a post or page is saved and not on autosave
        if($parent_id = wp_is_post_revision($postID))
        {
        $postID = $parent_id;
        }

        if ($_POST['customHeader']) 
        {
            update_custom_meta($postID, $_POST['customHeader'], 'customHeader');
        }
        else
        {
            update_custom_meta($postID, '', 'customHeader');
        }
        if ($_POST['customTitle']) 
        {
            update_custom_meta($postID, $_POST['customTitle'], 'customTitle');
        }
        else
        {
            update_custom_meta($postID, '', 'customTitle');
        }
    }

  }
    function update_custom_meta($postID, $newvalue, $field_name) {
    // To create new meta
    if(!get_post_meta($postID, $field_name)){
    add_post_meta($postID, $field_name, $newvalue);
    }else{
    // or to update existing meta
    update_post_meta($postID, $field_name, $newvalue);
    }
}
?>
10
задан Scott B 29 March 2010 в 21:42
поделиться

2 ответа

Система автоматического сохранения Wordpress вполне может быть вашей проблемой, так как я думаю, что пользовательские поля не передаются при автоматическом сохранении (поэтому ваши переменные customHeader и customTitle будут пустыми во время автоматического сохранения).

В вашей функции сохранения вы должны проверить, установлена ли константа DOING_AUTOSAVE (это кажется предпочтительнее, чем проверка действия поста), и вернуть, если да. Что-то вроде этого:

if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

См. этот тикет для получения дополнительной информации: http://core.trac.wordpress.org/ticket/10744

16
ответ дан 3 December 2019 в 19:32
поделиться

В WordPress Codex есть ссылка на функцию add_meta_box() с отличным примером.

И да, она используется


 if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
    return $post_id;

, и я думаю, что вы реализовали ее правильно.

4
ответ дан 3 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: