在4.4更新中的小部件中创建数组实例时出现问题

时间:2015-12-09 作者:user1181378

在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
    }
}

###################################################################

Illustration

1 个回复
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();

相关推荐

Dynamic Width of Widgets

好的,我在一个侧边栏中为最多6个小部件使用以下代码function s57d_sidebar1_params($params) { $sidebar_id = $params[0][\'id\']; if ( $sidebar_id == \'sidebar-1\' ) { $total_widgets = wp_get_sidebars_widgets(); $sidebar_widgets = count($total_wi