2017-03-06 2 views
1

Ich stehe vor einem Problem, das mich verrückt zu machen beginnen. Ich habe eine Metabox für meine Wordpress-Website erstellt. Für die Tests habe ich es auf einer Seite benutzt. Alles ging gut, ohne Probleme, aber wenn ich versuche, die gleiche Metabox in der Mediendatei (Anhang) zu verwenden, kann ich die Daten nicht speichern. Die Metabox wird dort korrekt angezeigt, aber ich kann keine Daten speichern, die ich eingegeben habe. Ich muss etwas vermissen, kann aber nicht herausfinden, was. Vielen Dank im Voraus für Ihre Hilfe Mit freundlichen Grüßen AlainMeine Metabox-Daten speichern nicht

Hier ist der Code:

<?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); 
    } 
} 
} 

Antwort

0

ich in letzter Zeit das gleiche Problem aufgetreten. Ich hatte zwei verschiedene Metaboxensätze, einen auf der Seite und einen auf der 'normalen' Spalte. Die Felder in meinen "Seiten" -Metaboxen waren gut, aber nicht die "normalen". Ich habe versucht, den Kontext meines zweiten auf "Seite" anstatt "normal" und BAM zu ändern! Alles wurde gut gespeichert.

Also ich schlage vor, Sie versuchen das auch und sagen uns, ob es funktioniert.

Ich habe einige Nachforschungen gemacht, aber ich fand keine Erklärung dafür. Es könnte etwas geben, was ich nicht verstehe und falsch mache, oder könnte eine Art Bug sein. Ich werde weiter nachforschen.

Verwandte Themen