Hãy tìm kiếm trước khi đặt câu hỏi, bạn sẽ tiết kiệm rất nhiều thời gian

Nhưng đừng ngại hỏi và đóng góp câu trả lời

Nội dung Cusotm Meta Box không lưu được giá trị.

0 phiếu
level-1 đã hỏi 3 Tháng 9, 2015 bởi Khách

Tôi đã tạo ra một custom meta box cho custom post type của tôi, nhưng nó không thể lưu được nội dung khi nhấn nút Publish hoặc Update. Code như sau:

/*

 * 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' );

Hỏi bạn bè:

1 câu trả lời

0 phiếu
level-1 đã trả lời 3 Tháng 9, 2015 bởi Khách

Function mà bạn update cần có parameter meta_box_nonce, nhưng meta box template của bạn lại không có trường này.

Bạn thử thêm dòng sau vào cuối hàm author_book_meta_box () xem code có chạy không:

wp_nonce_field ('author_book_meta_box_nonce', 'meta_box_nonce');

Chú ý tiền tố của parameter meta_box_nonce để tránh xung đột với các plugin khác.

Chuyên mục HOT

Câu hỏi từ mạng lưới

...