简单自定义Metabox不保存

时间:2013-08-26 作者:Howdy_McGee

我不太清楚为什么,但我一直在尝试各种不同的解决方案,但似乎都不管用。我交易过update_post_meta 具有add_post_meta 甚至把它分成3个条件,看看它是在添加、更新还是删除,但似乎什么都不起作用。

问题是它实际上不会在更新时保存和显示数据。我知道设置了“\\u desc”,因为当我die() (就在更新之前)。建议我如何找出为什么它没有更新?

/** Add the Meta Box **/
function add_custom_meta_box() {
    global $meta_box;
    add_meta_box(
        \'short-desc\', // $id
        \'Short Description\', // $title 
        \'show_custom_meta_box\', // $callback
        \'post\', // $page
        \'side\', // $context
        \'high\'); // $priority
}
add_action(\'add_meta_boxes\', \'add_custom_meta_box\');

/** The Callback **/
function show_custom_meta_box() {
    global $post;
    // Use nonce for verification
    echo \'<input type="hidden" name="shortdesc_meta_box_nonce" value="\'.wp_create_nonce(basename(__FILE__)).\'" />\';

    // get value of this field if it exists for this post
    $meta = get_post_custom($post->ID);

    // Begin the field table
    echo \'<table class="form-table"><tr><td>\';

        echo \'<strong>Enter A Short Description:</strong>
            <input type="text" name="_desc" id="short-desc" value="\'.$meta[\'_desc\'].\'" size="30" />\';

    echo \'</td></tr></table>\'; // end table
} 

/** Save the Data **/
function save_custom_meta($post) {
    // verify nonce
    if (!wp_verify_nonce($_POST[\'shortdesc_meta_box_nonce\'], basename(__FILE__))) 
        return $post->ID;
    // check autosave
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
        return $post->ID;
    // check permissions
    if (!current_user_can(\'edit_post\', $post->ID))
        return $post->ID;

    //echo $_POST[\'_desc\'];
    //die();

    if(isset($_POST[\'_desc\']))
        update_post_meta($post->ID, \'_desc\', strip_tags($_POST[\'_desc\']));
}
add_action(\'save_post\', \'save_custom_meta\', 1, 2);

1 个回复
最合适的回答,由SO网友:Vinod Dalvi 整理而成

这是因为save_post hook函数接受post id作为参数,而不是post对象,因此save\\u custom\\u元函数应如下所示。

/** Save the Data **/
function save_custom_meta($post_id) {
    // verify nonce
    if (!wp_verify_nonce($_POST[\'shortdesc_meta_box_nonce\'], basename(__FILE__))) 
    return $post_id;
    // check autosave
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
    return $post_id;
    // check permissions
    if (!current_user_can(\'edit_post\', $post_id))
    return $post_id;

    //echo $_POST[\'_desc\'];
    //die();

    if(isset($_POST[\'_desc\']))
        update_post_meta($post_id, \'_desc\', strip_tags($_POST[\'_desc\']));
}
add_action(\'save_post\', \'save_custom_meta\', 1, 2);

结束

相关推荐

Inconsistent title for posts

我记得,为了优化标题值,我编辑了部分主题。目前在谷歌我看到了this.然而,当我打开一篇文章时,网站名称不会附加到文章标题中。我看了看header.php 并找到以下行:<title><?php seotitles(); ?></title> 我正在使用“All-in-one SEO”插件,并手动设置了每个帖子的标题和描述,这样做时,我不会在帖子名称中附加站点名称。我怎样才能让我在谷歌看到的东西和用户看到的东西相互同步?