2013-10-27 34 views
1

我做了一个多选项的metabox,从另一个自定义帖子的值,我会保存多个选择,并显示在管理页面。 惠特这个代码我几乎做到了,但: 多选择项和保存功能只保存一个值和列功能只显示字数组或ID ....你能帮我。WordPress的保存多个选择和自定义列错误

这是代码

function palinsesto_manager_meta_options($post) 
{ 
wp_nonce_field('radio_schedule', 'schedule_noncename'); 
echo '<label for="speaker_id">'; 
_e("Speaker", 'speaker_id'); 
echo '</label> '; 
$args = array('post_type' => 'speaker'); 
$loop = new WP_Query($args); 
echo '<select name="speaker_id" id="speaker_id" multiple="multiple">'; 
foreach($loop->posts as $dj): 
    if($dj->ID == get_post_meta($post->ID, 'speaker_id', true)) 
    { 
     $select = 'selected'; 
    }else{ 
    $select = ''; 
} 
echo '<option value="'.$dj->ID.'" '.$select.'>'.$dj->post_title.'</option>'; 
endforeach; 
echo '</select>'; 
echo '<p>Tieni premuto CTRL per selezionare più speakers</p>'; 
} 

add_action('save_post', 'save_palinsesto_manager_meta_options'); 
function save_palinsesto_manager_meta_options($post_id) 
{global $post; 
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ 
    //if you remove this the sky will fall on your head. 
    return; 
}else{ 
    if(isset($_POST['speaker_id'])) { 
     update_post_meta($post_id,'speaker_id', esc_attr( $_POST['speaker_id'])); 
    } 
} 
} 

add_filter('manage_palinsesto_posts_columns', 'columns_palinsesto'); 
function columns_palinsesto($old_columns) 
{ 
$new_columns = array(
    'cb'  => '<input type="checkbox">', 
    'img' => 'Immagine', 
    'title' => __('Palinsesto'), 
    'conduce' => 'Conduce', 

); 
return array_merge($new_columns, $old_columns); 
} 

add_action('manage_palinsesto_posts_custom_column', 'get_palinsesto_columns', 
10, 2); 
function get_palinsesto_columns($col, $post_id) 
{global $post; 

$conduce=get_post_meta($post_id,'speaker_id', true); 


switch($col) { 
case 'img': 
    if(has_post_thumbnail($post_id)) { 
     echo get_the_post_thumbnail($post_id); 
    } else { 
     echo 'Nessuna immagine!'; 
    } 
    break; 
case 'conduce': 

    echo $conduce; 
    break; 
} 
} 

这是meta框部....从speaker_id

add_action('init', 'palinsesto_manager'); 
function palinsesto_manager() { 

$labels = array(
    'name'    => __('Palinsesto'), 
    'singular_name'  => __('programma'), 
    'add_new'   => __('Aggiungi Programma'), 
    'add_new_item'  => __('Nuovo Programma'), 
    'edit_item'   => __('Modifica Programma'), 
    'new_item'   => __('Nuovo Programma'), 
    'all_items'   => __('Palinsesto'), 
    'view_item'   => __('Visualizza '), 
    'search_items'  => __('Cerca '), 
    'not_found'   => __('Programma non trovato'), 
    'not_found_in_trash' => __('Programma non trovato nel cestino'), 
); 

$args = array(
    'labels'    => $labels, 
    'public'    => true, 
    'show_ui' => true, 
    'rewrite'   => array('slug' => 'palinsesto'), 
    'publicly_queryable' => true, 
    'has_archive'  => true, 
    'capability_type' => 'post', 
    'hierarchical'  => false, 
    'menu_icon' => get_stylesheet_directory_uri() . '/images/palinsestoic.png', 
    'menu_position'  => 5, 
    'supports'   => array(
     'title', 
     'thumbnail' 
    ), 
); 

register_post_type('palinsesto', $args); 
} 

if (function_exists('add_theme_support')) { 
add_theme_support('post-thumbnails'); 
set_post_thumbnail_size(150, 150, true); 
add_image_size('cover', 260, 160); 
} 
add_action("add_meta_boxes", "palinsesto_box"); 

function palinsesto_box() { 
add_meta_box("palinsesto-meta", "Speakers", "palinsesto_manager_meta_options", "palinsesto", "side");} 
+0

你贴错代码。列部分是不相关的,meta盒部分丢失。提示:缩进代码*使生活更轻松*。像这样是不可读的。对我来说没问题,因为我粘贴在我的编辑器中,并选择“自动缩进”和presto:可读代码。 – brasofilo

+0

metabox正在工作,选择项目也是如此(从另一个自定义帖子中获取它的值)唯一的问题是它只保存一个值,而管理员显示的是word数组或id号 – zen

+0

如果没有正确的代码来重现,则无法提供帮助该问题,请参阅:http://sscce.org – brasofilo

回答

2

变化name属性来speaker_id []

变化这样的代码:

<select name="speaker_id" id="speaker_id" multiple="multiple">

<select name="speaker_id[]" id="speaker_id" multiple="multiple">

,它将被保存为阵列

相关问题