Cusotm MetaBox内容未保存

时间:2015-08-27 作者:Darpan Kulkarni

我已将自定义元框添加到自定义帖子类型中,但它不会在单击发布或更新按钮时保存内容。

/*
 * Custom book metabox
 */

// Add metabox
function author_book_meta_box_add() {
    add_meta_box( \'author-book\', \'Select Book of Author\', \'author_book_meta_box\', \'awp-author\', \'normal\', \'high\' );
} 
add_action( \'add_meta_boxes\', \'author_book_meta_box_add\' );

// Metabox callback
function author_book_meta_box( $post ) {
    $values = get_post_custom($post->ID);

    //testing...
    print_r($values);

    $selected = isset( $values[\'book_meta_box_select\'] ) ? esc_attr( $values[\'book_meta_box_select\'][0] ) : \'\';
    echo "selected".$selected;

    // Add a nonce field so we can check for it later.
    //wp_nonce_field( \'author_book_meta_box_save\', \'author_book_meta_box_nonce\' );

    ?>
    <p>
    <label for="book_meta_box_select">Select Book: </label>
    <select name=\'book_meta_box_select\'>
        <?php $posts=get_posts(array(\'post_type\' => \'awp-catalogue\', \'posts_per_page\' => -1)); foreach ($posts as $post): ?>
        <option value="<?php echo esc_attr($post->post_title); ?>" <?php selected( $selected, $post->post_title ); ?>><?php echo esc_html($post->post_title); ?></option>
        <?php endforeach; ?>
    </select>
    </p>
    <?php   
}
function author_book_meta_box_save( $post_id )
{
    // Bail if we\'re doing an auto save
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;

    // if our nonce isn\'t there, or we can\'t verify it, bail
    if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'author_book_meta_box_nonce\' ) ) return;

    // if our current user can\'t edit this post, bail
    if( !current_user_can( \'edit_post\' ) ) return;

    // Make sure your data is set before trying to save it
    if( isset( $_POST[\'book_meta_box_select\'] ) )
        update_post_meta( $post_id, \'book_meta_box_select\', esc_attr( $_POST[\'book_meta_box_select\'] ) );
}
add_action( \'save_post\', \'author_book_meta_box_save\' );

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

您的更新函数要求一个名为meta_box_nonce (顺便说一句,这是一个坏名字)但是你的元框模板没有提供这样的字段。

如果在函数末尾添加以下行,应该可以author_book_meta_box():

wp_nonce_field( \'author_book_meta_box_nonce\', \'meta_box_nonce\' );
请考虑在请求参数名称前加前缀meta_box_nonce. E、 g。your_plugin_meta_box_nonce 避免与其他插件发生冲突。

相关推荐

如何在WordPress开发中添加带有ACF自定义字段ID的自定义metabox字段

我是wordpress开发的新手,我在我的项目中安装了高级自定义字段插件,并创建了两个文本字段名称&;我还创建了一个插件,可以在帖子中创建一个带有文本框的元框。现在在帖子中,我将获得自定义字段名称(&A);电子邮件和我的自定义元框旁边将出现,但我必须将我的元框附加到名称字段旁边,即在名称字段和电子邮件字段之间。我的metabox代码如下。请任何人帮帮我//Creating the custom meta box function my_notice_meta_box() {