我正在尝试将所有选项保存在<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的惯用方式是什么?
提前感谢!
最合适的回答,由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;
}