我想更改下面的代码,以允许选中多个复选框。它当前只保存和更新一个选择。要再次更新该选项,我必须“取消选中”之前的选择,然后再进行一次选择以保存它。
case \'tax_select\':
$terms = get_terms( $field[\'id\'], \'get=all\' );
$selected = wp_get_object_terms( $post->ID, $field[\'id\'] );
foreach ( $terms as $term ) {
printf( \'<input type="checkbox" name="%s[]" value="%s" %s/><br />\', $field[\'id\'], $term->slug, !empty( $selected ) && !strcmp( $term->slug, $selected[0]->slug ) ? \' checked="checked"\' : \'\' );
}
$taxonomy = get_taxonomy( $field[\'id\'] );
echo \'<span class="description"><a href="\' . get_bloginfo( \'home\' ) . \'/wp-admin/edit-tags.php?taxonomy=\' . $field[\'id\'] . \'">Manage \' . $taxonomy->label . \'</a></span>\';
break;
新增:如何保存数据:
// Save the Data
function save_custom_meta($post_id) {
global $custom_meta_fields;
// verify nonce
if (!wp_verify_nonce($_POST[\'custom_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;
}
// loop through fields and save the data
foreach ($custom_meta_fields as $field) {
if($field[\'type\'] === \'tax_select\') continue;
$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);
}
} // end foreach
// save taxonomies
$post = get_post($post_id);
$category = $_POST[\'category\'];
wp_set_object_terms( $post_id, $category, \'category\' );
}
add_action(\'save_post\', \'save_custom_meta\');
最合适的回答,由SO网友:Rob Myrick 整理而成
在经历了一天又一天的挫折之后,我自豪地回答我自己的问题。
原始代码没有显示多个复选框,因为我使用的是条件!strcmp( $term->slug, $selected[0]->slug )
渲染我的“选中”选项。不知何故,它最多只返回1个“checked”值。
正确的条件只是获取所选选项的值,然后验证它是否存在于$meta
数组以返回checked="checked"
价值因此,代码如下:
foreach ( $terms as $term ) {
echo \'<label for="\'.$field[\'id\'].\'">\'.$term->slug.\'</label>\';
if (!empty ($selected) && in_array($term->slug, $meta))
echo \'<input type="checkbox" name="\'.$field[\'id\'].\'[]" value="\'.$term->slug.\'" checked="checked"/><br />\';
else echo \'<input type="checkbox" name="\'.$field[\'id\'].\'[]" value="\'.$term->slug.\'"/><br />\';
}