将选定的多选项目设置为“已选定”

时间:2011-08-28 作者:user8220

我正在为一个新的wordpress主题开发一个主题设置面板,它有一个选项来排除循环中显示的类别。我设法使主要功能正常工作,使用了一个multilselect框并将值保存为array。。。

<?php $cats = get_categories(\'hide_empty=0&orderby=name\'); ?>
<select name="<?php echo $option[\'id\']; ?>[]" id="<?php echo $option[\'id\']; ?>" multiple="multiple">  
    <option value="0">None (don\'t exclude anything)</option>
    <?php foreach ($cats as $cat_list ) { ?>
        <option value="<?php echo $cat_list->cat_ID; ?>" <?php selected( $selected, $cat_list->cat_ID ); ?>><?php echo $cat_list->cat_name; ?></option> 
    <?php } ?>
</select>
但是我不明白如何把每一项都登记进去foreach() 如果其值与存储值数组中的一个值匹配,则循环,然后应用selected="selected" 如果它返回真值。我明白了selected() wp函数,但不知道如何在这种情况下使用它(内部有多个值foreach() 循环)。

任何帮助都将不胜感激,我是n00b,所以如果这是一个愚蠢的问题,请原谅我:)

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

我假设你$selected 变量包含当前选定项目的值数组?

在这种情况下,您不能使用selected(带有多个选择框),因为它只比较两个字符串。它不会测试该值是否在数组中。相反,使用三元语句和in_array()

<?php 
foreach ($cats as $cat_list ) { 
$selected = in_array( $cat_list->cat_ID, $selected ) ? \' selected="selected" \' : \'\';    
?>
    <option value="<?php echo $cat_list->cat_ID; ?>" <?php echo $selected; ?>><?php echo $cat_list->cat_name; ?></option> 
<?php } ?>

SO网友:Paolo

我知道这是一个老问题,但仍然没有使用核心函数回答答案。。。

这是:

$cats = get_categories(\'hide_empty=0&orderby=name\'); ?>
<select name="<?php echo $option[\'id\']; ?>[]" id="<?php echo $option[\'id\']; ?>" multiple="multiple">
<option value="0">None (don\'t exclude anything)</option>
<?php foreach ( $cats as $cat_list ) { ?>
    <option value="<?php echo $cat_list->cat_ID; ?>" <?php selected( true, in_array($cat_list->cat_ID, $selected ) ); ?>><?php echo $cat_list->cat_name; ?></option>
<?php } ?>
</select>
确保$selected 当然是包含选定类别ID的数组。

SO网友:kaiser

Q并不愚蠢。在我看来,这只是一种极其混乱的记录方式。我还记得,在抄本中有一个地方,使用selected() 类似的东西是必须的(!)。我不感到委屈。

无论如何:selected( \'one_value\', \'val_to_compare_with\', true );

SO网友:Akhtarujjaman Shuvo

让我们简化一下:

<?php 
foreach ($cats as $cat_list ) { ?>
    <option value="<?php echo $cat_list->cat_ID; ?>" <?php selected( in_array($cat_list->cat_ID, $selected ) ); ?>><?php echo $cat_list->cat_name; ?></option> 
<?php } 
?>
在这里,$selected 变量包含当前选定项目的值数组。

结束

相关推荐

我可以在两个不同的页面上有两个不同的图库吗?每个页面都指向不同的Attachment.php文件?

我想为每个库设置不同的附件页面样式,但我不确定如何设置(很抱歉,我对wp开发还是新手!)。我希望我可以使用依恋。php的一个和图像。php为另一个,但图像。php覆盖了两者,因为两者都只是图像库。我想我可能需要在附件中添加一些其他类型的IF-type语句。php,这将细分库。。。但如果是那样的话,我不知道我怎么能得到。php区分每一个。我们将非常感谢您的帮助!谢谢eric