在WordPress 4.4最新更新之前,我能够通过以下方式从多选菜单在小部件中创建阵列实例:
<?php $cats = get_categories(); ?>
<select multiple="multiple" name="<?php echo $this->get_field_name(\'cats][\') ?>">
<?php foreach ( $cats as $cat ) { ?>
<option value="<?php echo $cat->term_id ?>"><?php echo $cat->name; ?></option>
<?php } ?>
</select>
的类型
$instance[\'cats\']
在更新之前,此代码生成的是一个数组,现在是一个字符串。
发生了什么变化,我如何解决?
=======
更新:小部件的完整代码:
###################################################################
function widet_sample() {
register_widget(\'widet_sample\');
}
add_action(\'widgets_init\', \'widet_sample\');
class widet_sample extends WP_Widget {
function widet_sample() {
parent::__construct(false, \'SAMPLE\');
}
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance[\'cats\'] = $new_instance[\'cats\'];
return $instance;
}
function form($instance) {
?>
<p>
Categories IDs: <?php print_r($instance[\'cats\']); ?>
</p>
<p>
<?php $cats = get_categories(); ?>
<select class="widefat" multiple="multiple" name="<?php echo $this->get_field_name(\'cats][\') ?>">
<?php foreach ( $cats as $cat ) { ?>
<option value="<?php echo $cat->term_id ?>"><?php echo $cat->name; ?></option>
<?php } ?>
</select>
</p>
<?php
}
}
###################################################################
SO网友:user1181378
问题解决了!但仍然不知道4.4更新中发生了什么变化。
在4.4之前,可以使用已还原的方括号生成数组实例,如下所示:
<select multiple="multiple" name="<?php echo $this->get_field_name(\'cats][\') ?>">
//$instance[\'cats\'] = array();
从4.4开始,您可以在常规情况下使用方括号,如下所示:
<select multiple="multiple" name="<?php echo $this->get_field_name(\'cats[]\') ?>">
//$instance[\'cats\'] = array();
或者,使用通用的最佳方法:
<select multiple="multiple" name="<?php echo $this->get_field_name(\'cats\') ?>[]">
//$instance[\'cats\'] = array();