2013-07-19 10 views
5

Ich versuche, einige Daten in WordPress-Datenbank von einer Meta-Box zu speichern.Meta-Box-Daten aus der ausgewählten Dropdown-Liste speichern

Ich habe eine Dropdown-Liste, um einige Optionen auszuwählen, und ich möchte die ausgewählte Option in der Datenbank dank Meta-Box speichern.

Allerdings habe ich einige Schwierigkeiten mit der Funktion in PHP speichern:

<?php 

function add_admin_menu_class_meta_box() { 
    $pages = array('post', 'portfolio'); 
    foreach($pages as $page) { 
     add_meta_box('custom_element_grid_class','Element grid size', 'custom_element_grid_class_meta_box', $page, 'side', 'high'); 
    } 
} 
add_action('admin_menu', 'add_admin_menu_class_meta_box'); 

function custom_element_grid_class_meta_box(){ 

    ?> 

    <label>Choose the size of the element : </label> 

    <select name="custom_element_grid_class" id="custom_element_grid_class"> 
     <option value="normal" <?php selected($meta_element_class, 'normal'); ?>>normal</option> 
     <option value="square" <?php selected($meta_element_class, 'square'); ?>>square</option> 
     <option value="wide" <?php selected($meta_element_class, 'wide'); ?>>wide</option> 
     <option value="tall" <?php selected($meta_element_class, 'tall'); ?>>tall</option> 
    </select> 


    <?php 
} 

add_action('save_post', 'save_custom_element_grid_class'); 
function save_custom_element_grid_class(){ 

global $post; 

if(!isset($_POST["custom_element_grid_class"])): 
    return $post; 
    endif; 
    update_post_meta($post->ID, 'custom_element_grid_class', $meta_element_class); 
} 

?> 

Wie kann ich den Auswahlwert erhalten so mit update_post_meta() retten?

Antwort

10

Hier ist der Code, den ich getestet und es funktioniert:

<?php 
/** 
* Plugin Name: Metabox test 
* 
*/ 

add_action('add_meta_boxes', 'so_custom_meta_box'); 

function so_custom_meta_box($post){ 
    add_meta_box('so_meta_box', 'Custom Box', 'custom_element_grid_class_meta_box', $post->post_type, 'normal' , 'high'); 
} 

add_action('save_post', 'so_save_metabox'); 

function so_save_metabox(){ 
    global $post; 
    if(isset($_POST["custom_element_grid_class"])){ 
     //UPDATE: 
     $meta_element_class = $_POST['custom_element_grid_class']; 
     //END OF UPDATE 

     update_post_meta($post->ID, 'custom_element_grid_class_meta_box', $meta_element_class); 
     //print_r($_POST); 
    } 
} 

function custom_element_grid_class_meta_box($post){ 
    $meta_element_class = get_post_meta($post->ID, 'custom_element_grid_class_meta_box', true); //true ensures you get just one value instead of an array 
    ?> 
    <label>Choose the size of the element : </label> 

    <select name="custom_element_grid_class" id="custom_element_grid_class"> 
     <option value="normal" <?php selected($meta_element_class, 'normal'); ?>>normal</option> 
     <option value="square" <?php selected($meta_element_class, 'square'); ?>>square</option> 
     <option value="wide" <?php selected($meta_element_class, 'wide'); ?>>wide</option> 
     <option value="tall" <?php selected($meta_element_class, 'tall'); ?>>tall</option> 
    </select> 
    <?php 
} 
+0

Dank für Ihre Antwort danken. Aber es funktioniert nicht ... Wert ist nicht speichern und Liste nicht aktualisieren ... – freaky

+0

Wenn Sie 'print_r ($ _ POST)' was bekommen Sie? –

+0

Nichts, ein leeres Array ... Ich verstehe wirklich nicht mit Ihrem Code, wie es etwas speichern kann ... – freaky