2014-09-07 6 views
0

Я создал мета-ящик. Код:Как сохранить значение meta box?

// Create your custom meta box 
add_action('add_meta_boxes', 'hotel_amenities'); 
    // Add a custom meta box to a post 
    function hotel_amenities($post) { 
     add_meta_box(
       'Meta Box Amenities', // ID, should be a string 
       'Amenities', // Meta Box Title 
       'amenities_content', // Your call back function, this is where your form field will go 
       'post', // The post type you want this to show up on, can be post, page, or custom post type 
       'normal', // The placement of your meta box, can be normal or side 
       'high' // The priority in which this will be displayed 
      ); 
    } 

    // Content for the custom meta box 
    function amenities_content($post) { 
     echo '<label>Bed room</label>'; 
     echo '<input type="text" name="amenity_bed_room" value="" />'; 
    } 

    // Save your meta box content 
    add_action('save_post', 'save_amenities'); 
    // save newsletter content 
    function save_amenities(){ 
     global $post; 
     // Get our form field 
     if($_POST) : 
      $amenities_meta = esc_attr($_POST['amenity_bed_room']); 
      // Update post meta 
      update_post_meta($post->ID, '_amenities_custom_meta', $amenities_meta); 
     endif; 
    } 

Он показывает мета-окно на странице сообщения администратора с текстовым полем. но он становится пустым, если я сохраняю или обновляю сообщение после того, как поместил что-нибудь в текстовое поле.

screen shot

Кажется function save_amenities() не работает. Что я делаю неправильно в этом коде?

Также для получения этого значения я использую функцию ниже. Это верно?

//get amenities meta box values 
function get_amenities_meta_box() { 
    global $post; 
    $meta_values = get_post_meta($post->ID, '_amenities_custom_meta', true); 
} 
+0

[примеры] (http://wordpress.stackexchange.com/search?tab=votes&pagesize=50&q=%2bsave_post%20%2badd_meta_boxes%20is% 3aanswer) – brasofilo

+0

Вам не хватает 'if (определено ('DOING_AUTOSAVE') && DOING_AUTOS AVE) {return;} ', здесь есть пример: http://codex.wordpress.org/Function_Reference/add_meta_box –

+0

Hah. Слово к «мясной коробке». – sbeliv01

ответ

3

Есть несколько вещей, которые идут не так. Конечное значение, которое вы хотите увидеть, будет отображаться атрибутом value в функции amenities_content. Сейчас он просто показывает пустую строку (""). Попробуйте поместить любое значение в этот атрибут, и вы должны увидеть его в мета-окне (value="this is a test").

Функция save_amenities в качестве параметра должна принимать $post_id. Вам понадобится обновить метаданные сообщения и дать реальное значение функции amenities_content, чтобы вернуться к экрану администратора.

Функция amenities_content должна действительно иметь поле nonce, которое затем должно быть проверено функцией save_amenities. И пользовательский ввод должен быть дезинфицирован до его сохранения (я делаю это как при сохранении, так и при его отображении. Я не уверен, что это необходимо.)

попробуйте это для функции amenities_content:

function amenities_content($post) { 
    // This is the value that was saved in the save_amenities function 
    $bed_room = get_post_meta($post->ID, '_amenity_bed_room', true); 

    wp_nonce_field('save_amenity', 'amenity_nonce'); 

    echo '<label>Bed room</label>'; 
    echo '<input type="text" name="amenity_bed_room" 
     value="' . sanitize_text_field($bed_room) . '" />'; 
} 

и это для save_amenities функции:

function save_amenities($post_id) { 

    // Check if nonce is set 
    if (! isset($_POST['amenity_nonce'])) { 
     return $post_id; 
    } 

    if (! wp_verify_nonce($_POST['amenity_nonce'], 'save_amenity')) { 
     return $post_id; 
    } 

    // Check that the logged in user has permission to edit this post 
    if (! current_user_can('edit_post')) { 
     return $post_id; 
    } 

    $bed_room = sanitize_text_field($_POST['amenity_bed_room']); 
    update_post_meta($post_id, '_amenity_bed_room', $bed_room); 
} 
Смежные вопросы