2013-07-19 8 views
5

Próbuję zapisać niektóre dane w bazie danych WordPress z meta box.Zapisz dane meta box z wybranej listy rozwijanej

Mam listę rozwijaną, aby wybrać niektóre opcje i chcę zapisać wybraną opcję w bazie danych dzięki meta box.

Jednak mam pewne trudności z funkcji oszczędzania w PHP:

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

?> 

Jak mogę uzyskać wybierz wartość zapisać go update_post_meta()?

Odpowiedz

10

Oto kod I przetestowane i działa:

<?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

dziękuję za odpowiedź. Ale to nie działa ... wartość nie jest zapisana, a lista wyboru nie jest aktualizowana ... – freaky

+0

Kiedy 'print_r ($ _ POST)' co otrzymujesz? –

+0

Nic, pusta tablica ... Naprawdę nie rozumiem z twoim kodem jak to może coś zapisać ... – freaky

Powiązane problemy