使用循环构建和更新小部件

时间:2013-04-22 作者:rugbert

所以我有一个即时消息制作的小部件,它允许用户更新4个开关。每个开关都有相同的字段、名称、描述、价格和金额,因此我决定使用for循环来构建小部件,而不是对每个字段进行硬编码,以避免重复我自己的操作。

我不知道如何保存这些值tho,因为从我为构建小部件而查看的Tut中,name字段必须是$this->get\\u field\\u name

小部件切换小部件[4][名称]

因此,我的form()函数如下所示

for($i =0; $i<4;$i++){
    $name = $instance[$i][\'name\'];  
    $description = $instance[$i][\'description\'];    
    $amount = $instance[$i][\'amount\'];  
    $price = $instance[$i][\'price\'];
?>

    <div id="<?php echo $i; ?>" class="switch_form" style="background-color:<?php echo $i%2 == 0 ? \'\': \'#DFDFDF\' ;?>; border-radius:4px; padding:5px;">
        <h4>Switch # <?php echo $i+1;?> </h4>
        <p>
            <label for="<?php echo $this->get_field_id( \'name\' ); ?>"><?php _e(\'Name:\', \'Name\'); ?></label>
            <input style ="width:90%;" name="<?php echo $this->get_field_name($i); ?>[\'name\']" value="<?php echo $name; ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id( \'description\' ); ?>"><?php _e(\'Description:\', \'Description\'); ?></label>
            <input style ="width:90%;" name="<?php echo $this->get_field_name($i); ?>[\'description\']" value="<?php echo $description; ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id( \'amount\' ); ?>"><?php _e(\'Amount:\', \'Amount\'); ?></label>
            <input style ="width:90%;" name="<?php echo $this->get_field_name($i); ?>[\'amount\']" value="<?php echo $amount; ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id( \'price\' ); ?>"><?php _e(\'Price:\', \'Price\'); ?></label>
            <input style ="width:90%;" name="<?php echo $this->get_field_name($i); ?>[\'price\']" value="<?php echo $price; ?>" />
        </p>
    </div>
<?php
}
我的update()函数如下所示:

function update( $new_instance, $old_instance )
{
    $instance = $old_instance;

    for($i =0; $i<4;$i++){
        $instance[$i][\'name\'] = strip_tags( $new_instance[$i][\'name\'] );
        $instance[$i][\'description\'] = strip_tags( $new_instance[$i][\'description\'] );      
        $instance[$i][\'amount\'] = strip_tags( $new_instance[$i][\'lights_fill\'] );
        $instance[$i][\'price\'] = strip_tags( $new_instance[$i][\'price\'] );
    }
    return $instance;

}
如何将这些值保存到数组中?

1 个回复
SO网友:fuxia

我不确定我是否正确地遵循了您的代码,但您可以尝试将所有数据设置为一个数组:

name="unique_widget_name[<?php echo $this->get_field_name($i); ?>][\'name\']"
非常相似的问题,但不完全相同:How to store widget fields data as an array?

结束

相关推荐

从Functions.php中导入WordPress XML文件

我正在开发一个主题,它有不同的添加内容的方法,因此,Wordpress的默认安装不会显示任何内容。我想知道在主题被激活后,是否可以通过内部函数和/或挂钩自动导入XML文件?User installs theme > User activates theme > Code behind the scenes loads up an XML file and performs a silent import of its contents当前要导入XML文件,您必须为Wordpress