在小部件表单中使用多个<SELECT>元素

时间:2014-10-10 作者:Thomas Russell

我正在尝试将所有选项保存在<select> 小部件中的元素。到目前为止,我有以下表单的PHP代码:

public function form( $instance ) {
    // Code for editing/adding title and adding IDs to the <select> object
    // ...

    <select class="widefat" id="<?php echo $this->get_field_id(\'ID_list\'); ?>" name="<?php echo $this->get_field_name(\'ID_list\'); ?>[]" multiple>
        <?php
            foreach( $instance[\'ID_list\'] as $id )
            {
                echo \'<option value="\' . $id . \'">\' . $id . \'</option>\' . "\\n";
            }
        ?>
    </select>
}
我还为表单末尾的save按钮创建了一个jQuery处理程序,其代码如下:

$(\'input#<?php echo $this->get_field_id(\'savewidget\'); ?>\').click( function( event ) {
     $(\'select#<?php echo $this->get_field_id(\'ID_list\'); ?> option\').prop(\'selected\', true);
});
然后,我将以下代码用于update 小部件的功能:

public function update( $new_instance, $old_instance ) {
     // Update the title, etc...
     $instance[\'ID_list\'] = isset( $new_instance[\'ID_list\'] ) ? $new_instance[\'ID_list\'] : array();

     return $instance;
}
我希望$instance[\'ID_list\'] 会表现得像_POST(\'ID_list\') 将是一个普通PHP表单,并且将是一个包含所有选定元素(在本例中是所有添加的ID)的子数组,但是,这似乎不会发生;WordPress的惯用方式是什么?

提前感谢!

1 个回复
最合适的回答,由SO网友:Courtney Ivey 整理而成

我将删除添加的jQuery保存函数。。。然后。。。

对于表单函数,请尝试以下操作:

public function form( $instance ) {
    // Code for editing/adding title and adding IDs to the <select> object
    // ...

    <?php
            printf (
                \'<select multiple="multiple" name="%s[]" id="%s" class="widefat" size="15" style="margin-bottom:10px">\',
                $this->get_field_name(\'ID_list\'),
                $this->get_field_id(\'ID_list\')
            );

            // Each individual option
            foreach( $instance[\'ID_list\'] as $id )
            {
                printf(
                    \'<option value="%s" %s style="margin-bottom:3px;">%s</option>\',
                    $id,
                    in_array( $id, $instance[\'ID_list\']) ? \'selected="selected"\' : \'\',
                    $id
                );
            }

            echo \'</select>\';
}
好吧,试试这个update 功能:

   <?php
    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance[\'ID_list\'] = esc_sql( $new_instance[\'ID_list\'] );
        $instance[\'title\'] = esc_sql( $new_instance[\'title\']);
        return $instance;
    }

结束

相关推荐

Page full of widgets?

有没有可能创建一个只有很多小部件的页面?我看到的大多数WP站点的小部件都在侧边栏中,但我想要一个只有小部件而没有其他内容的页面。我当前使用的主题允许我向页面添加列或表,但我不知道(在任何主题中)是否可以向这些列或表单元格添加小部件?