您必须收集多个同名字段,如下所示…
name="collect[1]"
name="collect[2]"
…并根据此调整您的小部件逻辑。
下面是一个非常简单的演示小部件:
<?php # -*- coding: utf-8 -*-
/* Plugin Name: Store Options as array */
add_action( \'widgets_init\', array ( \'T5_Array_Options_Widget\', \'register\' ) );
class T5_Array_Options_Widget extends WP_Widget
{
/**
* Constructor.
*/
public function __construct()
{
parent::__construct( strtolower( __CLASS__ ), \'Array Demo\' );
}
/**
* Echo the settings update form
*
* @param array $instance Current settings
*/
public function form( $instance )
{
$title = isset ( $instance[\'title\'] ) ? $instance[\'title\'] : \'\';
$title = esc_attr( $title );
printf(
\'<p><label for="%1$s">%2$s</label><br />
<input type="text" name="%3$s" id="%1$s" value="%4$s" class="widefat"></p>\',
$this->get_field_id( \'title\' ),
\'Title\',
$this->get_field_name( \'title\' ),
$title
);
$fields = isset ( $instance[\'fields\'] ) ? $instance[\'fields\'] : array();
$field_num = count( $fields );
$fields[ $field_num + 1 ] = \'\';
$fields_html = array();
$fields_counter = 0;
foreach ( $fields as $name => $value )
{
$fields_html[] = sprintf(
\'<input type="text" name="%1$s[%2$s]" value="%3$s" class="widefat">\',
$this->get_field_name( \'fields\' ),
$fields_counter,
esc_attr( $value )
);
$fields_counter += 1;
}
print \'Fields<br />\' . join( \'<br />\', $fields_html );
}
/**
* Renders the output.
*
* @see WP_Widget::widget()
*/
public function widget( $args, $instance )
{
print $args[\'before_widget\']
. $args[\'before_title\']
. apply_filters( \'widget_title\', $instance[\'title\'] )
. $args[\'after_title\']
. join( \'<br />\', $instance[\'fields\'] )
. $args[\'after_widget\'];
}
/**
* Prepares the content. Not.
*
* @param array $new_instance New content
* @param array $old_instance Old content
* @return array New content
*/
public function update( $new_instance, $old_instance )
{
$instance = $old_instance;
$instance[\'title\'] = esc_html( $new_instance[\'title\'] );
$instance[\'fields\'] = array();
if ( isset ( $new_instance[\'fields\'] ) )
{
foreach ( $new_instance[\'fields\'] as $value )
{
if ( \'\' !== trim( $value ) )
$instance[\'fields\'][] = $value;
}
}
return $instance;
}
/**
* Tell WP we want to use this widget.
*
* @wp-hook widgets_init
* @return void
*/
public static function register()
{
register_widget( __CLASS__ );
}
}
后端
前端