2017-03-06 25 views
1

我面临一个问题,开始驱使我nuts.I创建了我的wordpress网站metabox。对于测试,我在页面上使用它。一切都很顺利,没有问题,但是当我尝试在媒体文件(附件)中使用完全相同的metabox时,我无法保存数据。 metabox在那里显示正确,但我无法保存我输入的任何数据。 我必须缺少一些东西,但无法弄清楚什么。 在此先感谢您的帮助 亲切的问候 阿兰我的元信息数据没有保存

下面是代码:

<?php 
$meta_box = array(
'id' => 'onzeroadagain-meta-box', 
'title' => 'Prints size and price availablility', 
'page' => 'attachment', 
'context' => 'normal', 
'priority' => 'high', 
'fields' => array(
    array(
     'name' => 'Small', 
     'id' => 'small-checkbox', 
     'type' => 'checkbox' 
    ), 
    array(
     'name' => 'Dimensions', 
     'id' => 'dimension-small', 
     'type' => 'text', 
     'std' => 'W x H in cm' 
    ), 
    array(
     'name' => 'Price', 
     'id' => 'price-small', 
     'type' => 'text', 
     'std' => 'in Euro' 
    ), 
    array(
     'name' => 'Medium', 
     'id' => 'medium-checkbox', 
     'type' => 'checkbox' 
    ), 
    array(
     'name' => 'Dimensions', 
     'id' => 'dimension-medium', 
     'type' => 'text', 
     'std' => 'W x H in cm' 
    ), 
    array(
     'name' => 'Price', 
     'id' => 'price-medium', 
     'type' => 'text', 
     'std' => 'in Euro' 
    ), 
    array(
     'name' => 'Large', 
     'id' => 'large-checkbox', 
     'type' => 'checkbox' 
    ), 
    array(
     'name' => 'Dimensions', 
     'id' => 'dimension-large', 
     'type' => 'text', 
     'std' => 'W x H in cm' 
    ), 
    array(
     'name' => 'Price', 
     'id' => 'price-large', 
     'type' => 'text', 
     'std' => 'in Euro' 
    )  
) 
); 
add_action('admin_menu', 'onzeroadagain_add_box'); 
// Add meta box 
function onzeroadagain_add_box() { 
global $meta_box; 
add_meta_box($meta_box['id'], $meta_box['title'], 'onzeroadagain_show_box', $meta_box['page'], $meta_box['context'], $meta_box['priority']); 
} 
// Callback function to show fields in meta box 
function onzeroadagain_show_box() { 
global $meta_box, $post; 
// Use nonce for verification 
echo '<input type="hidden" name="onzeroadagain_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />'; 
echo '<table class="form-table">'; 
foreach ($meta_box['fields'] as $field) { 
    // get current post meta data 
    $meta = get_post_meta($post->ID, $field['id'], true); 
    echo '<tr>', 
      '<th style="width:20%"><label for="', $field['id'], '">', $field['name'], '</label></th>', 
      '<td>'; 
    switch ($field['type']) { 
     case 'checkbox': 
      echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />'; 
      break; 
     case 'text': 
     echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:30%" />', '<br />', $field['desc']; 
      break; 
    } 
    echo  '</td><td>', 
     '</td></tr>'; 
} 
echo '</table>'; 
} 
add_action('save_post', 'onzeroadagain_save_data'); 
// Save data from meta box 
function onzeroadagain_save_data($post_id) { 
global $meta_box; 
// verify nonce 
if (!wp_verify_nonce($_POST['onzeroadagain_meta_box_nonce'],  basename(__FILE__))) { 
    return $post_id; 
} 
// check autosave 
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 
    return $post_id; 
} 
// check permissions 
if ('page' == $_POST['post_type']) { 
    if (!current_user_can('edit_page', $post_id)) { 
     return $post_id; 
    } 
} elseif (!current_user_can('edit_post', $post_id)) { 
    return $post_id; 
} 
foreach ($meta_box['fields'] as $field) { 
    $old = get_post_meta($post_id, $field['id'], true); 
    $new = $_POST[$field['id']]; 
    if ($new && $new != $old) { 
     update_post_meta($post_id, $field['id'], $new); 
    } elseif ('' == $new && $old) { 
     delete_post_meta($post_id, $field['id'], $old); 
    } 
} 
} 

回答

0

我最近遇到同样的问题。我有两套不同的元组,一个在侧面,另一个在'普通'列。我“边”metabox中的字段保存正常,但不是“正常”中的字段。我尝试将第二个的背景改为“侧”而不是“正常”和BAM!一切都很好。

所以我建议你也试试,并告诉我们它是否有效。

我做了一些研究,但没有找到任何解释。可能有些东西我不会忍受,做错了方式,或者可能是某种错误。我会继续调查。