下面是我的代码:
function pages_inner_custom_box2( $post ) {
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'pages_noncename' );
// The actual fields for data entry
$cats = get_post_meta( $post->ID, 'pages_categories_field', true);
echo '<ul>';
foreach( (get_categories() ) as $category):
if( $category->cat_ID != 14 ):
foreach( $cats as $values ) {
if( $values == $category->cat_ID ){
$checked = "checked=checked";
} else {
$checked = false;
}
}
echo'<li id="cat-'.$category->cat_ID.'">
<input type="checkbox" name="pages_categories_field[]" id="'
.$category->cat_ID.'" value="'
.$category->cat_ID.'" '
.$checked.'> <label for="'
.$category->cat_ID.'">'
.__($category->cat_name, 'pages_textdomain' )
.'</label></li>';
endif;
endforeach;
echo '</ul>';
}
这是怎么做的呢它在一个metabox中显示类别,现在的问题是在我更新选择之后,我选择了多个类别,它只会MARK AS CHECKED
只有一个类别。数据保存在数据库中。问题只在于选择。
我做错了什么?
你的代码是好的,但你有一些小错误,所以:
function pages_inner_custom_box2( $post ) {
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'pages_noncename' );
// The actual fields for data entry
$cats = get_post_meta($post->ID,'pages_categories_field',true);
echo '<ul>';
foreach((get_categories()) as $category):
$cat_id = $category->cat_ID;
if($cat_id != 14):
$checked = (in_array($cat_id,(array)$cats)? ' checked="checked"': "");
echo'<li id="cat-'.$cat_id.'"><input type="checkbox" name="pages_categories_field[]" id="'.$cat_id.'" value="'.$cat_id.'"'.$checked.'> <label for="'.$cat_id.'">'.__($category->cat_name, 'pages_textdomain' ).'</label></li>';
endif;
endforeach;
echo '</ul>';
}
,并确保将其保存为save_post回调函数中的数组像这样:
update_post_meta($post_id,'pages_categories_field',$_POST['pages_categories_field']);