如何使用REGISTER_SETING()主题选项处理多个选择选项

时间:2014-02-11 作者:Mayeenul Islam

我用的是伊恩·斯图尔特的Sample Theme Options 用于轻量级主题选项面板。

插入失败

我需要在db中插入多个类别,我使用了以下代码:

<select multiple="multiple" name="site_options[categorychoice]">
   <?php
   $args = array(
        \'orderby\' => \'name\',
        \'parent\' => 0,
        \'exclude\' => 1
     );
   $categories = get_categories( $args );
   foreach ($categories as $category) { ?>
        <option value="<?php echo $category->term_id; ?>" style="padding-right: 10px;" <?php selected( $site_options[\'categorychoice\'], $category->term_id ); ?> ><?php echo $category->cat_name . \' (\' . $category->category_count .\')\'; ?></option>
   <?php }  ?>
</select>
在代码的验证部分:

function theme_options_validate( $input ) {
   $got_categories = array( $input[\'categorychoice\'] );
}
它是在选项表中插入数据,但不是多个,它只是插入最后一个选择。所以我得到的是:\'categorychoice\' => string \'5\' (length=1) — 所有值中只有一个值,这是所选中的最后一个cat\\U id。

SELECTED=SELECTED失败

当数据与db匹配时,我也无法选择值。我试过我的代码This WPSE solution, 但失败了:

foreach ($categories as $category) { ?>
     <?php $selected = in_array( $category->cat_ID, $selected ) ? \' selected="selected" \' : \'\' ?>
     <option value="<?php echo $category->term_id; ?>" style="padding-right: 10px;" <?php echo $selected; ?> ><?php echo $category->cat_name . \' (\' . $category->category_count .\')\'; ?></option>
<?php } ?>

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

这里的问题是不允许PHP读取多个值,因为所有值都使用相同的名称site_options[categorychoice], 所以他们互相覆盖,最后一个获胜。

你需要更多的支架。设置name 您的属性select 元素到site_options[categorychoice][], 所有值都将由PHP读取。

SO网友:Mayeenul Islam

好啊以下是正确的代码位,我通过以下方式获得了解决方案:

<select multiple="multiple" name="site_options[categorychoice][]">
   <?php $option = get_option(\'site_options\'); ?>
   <?php
   $args = array(
     \'orderby\' => \'name\',
     \'parent\' => 0,
     \'exclude\' => 1
   );
   $categories = get_categories( $args );
   foreach ($categories as $category) { ?>
   <?php $selected = in_array( $category->cat_ID, $option[\'categorychoice\'] ) ? \' selected="selected" \' : \'\'; ?>
       <option value="<?php echo $category->term_id; ?>" <?php echo $selected; ?> >
          <?php echo $category->cat_name . \' (\' . $category->category_count .\')\'; ?>
       </option>
   <?php } //endforeach ?>
</select>
First of all: Getting knowledge 从@toscho开始,我对<select name=""> 要允许数组值存储二维数组,请执行以下操作:

<select multiple="multiple" name="site_options[categorychoice][]">
它解决了数据插入问题。

Secondly: 我将前端部分带到后端,以获取存储在db中的内容,其中包括:

<?php $option = get_option(\'site_options\'); ?>
然后用in_array()suggested by chrisguitarguy 要选择已插入的值,请执行以下操作:

<?php $selected = in_array( $category->cat_ID, $option[\'categorychoice\'] ) ? \' selected="selected" \' : \'\'; ?>
并呼应了$selected 进入<option>s:

<option <?php echo $selected; ?> >
它解决了所有问题,我可以在db中插入多项类别选择,也可以从中扣除。:)

感谢@toscho和@chrisguitarguy.:)

结束

相关推荐

将wp_NAV_MENU输出绕过SELECT菜单的选项标记

我在Wordpress中设置了wp\\U nav\\U菜单。我有两个父类别,每个类别有两个子类别,因此这会生成一个嵌套列表。我当前调用此菜单的代码是。。。<?php wp_nav_menu( array( \'theme_location\' => \'shop-categories\', \'container\' => \'nav\',