将复选框数组从单选更改为多选

时间:2012-06-16 作者:Rob Myrick

我想更改下面的代码,以允许选中多个复选框。它当前只保存和更新一个选择。要再次更新该选项,我必须“取消选中”之前的选择,然后再进行一次选择以保存它。

    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\');  

1 个回复
最合适的回答,由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 />\';
}  

结束

相关推荐