保存表单Widget后,如何将默认值设置为保存的值?

时间:2014-06-04 作者:user1532043

我试着在函数表单中这样做:

<?php
function form(){

    //Set up some default widget settings.

    $defaults = array( \'uid\' => __(\'121232\', \'example\'), \'height\' => __(\'250px\', \'example\'), \'width\' => __(\'170px\', \'example\') );   
    $instance = wp_parse_args( (array) $instance, $defaults ); 
    ?>
    <p>
        <label for="<?php echo $this->get_field_id( \'uid\' ); ?>"><?php _e(\'User ID:\', \'example\'); ?></label>
        <input id="<?php echo $this->get_field_id( \'uid\' ); ?>" name="<?php echo $this->get_field_name( \'uid\' ); ?>" value="<?php echo $instance[\'uid\']; ?>" style="width:100%;" />
    </p>

    <p>
        <label for="<?php echo $this->get_field_id( \'height\' ); ?>"><?php _e(\'Height:\', \'example\'); ?></label>
        <input id="<?php echo $this->get_field_id( \'height\' ); ?>" name="<?php echo $this->get_field_name( \'height\' ); ?>" value="<?php echo $instance[\'height\']; ?>" style="width:100%;" />
    </p>

    <p>
        <label for="<?php echo $this->get_field_id( \'width\' ); ?>"><?php _e(\'Width:\', \'example\'); ?></label>
        <input id="<?php echo $this->get_field_id( \'width\' ); ?>" name="<?php echo $this->get_field_name( \'width\' ); ?>" value="<?php echo $instance[\'width\']; ?>" style="width:100%;" />
    </p>

    <?php
}

    ?>
我可以使用我给定的默认值,但在表单中单击“保存”按钮和其他一些值后,它会返回到以前的默认值。在前端,小部件与我手动选择的值一起工作正常,但在管理面板中,表单显示的是代码中的默认值。

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

您需要相应的函数更新才能完成此操作。请参阅codex上的Widgets API:

http://codex.wordpress.org/Widgets_API

下面是他们的例子。

/**
 * Adds Foo_Widget widget.
 */
class Foo_Widget extends WP_Widget {

    /**
     * Register widget with WordPress.
     */
    function __construct() {
        parent::__construct(
            \'foo_widget\', // Base ID
            __(\'Widget Title\', \'text_domain\'), // Name
            array( \'description\' => __( \'A Foo Widget\', \'text_domain\' ), ) // Args
        );
    }

    /**
     * Front-end display of widget.
     *
     * @see WP_Widget::widget()
     *
     * @param array $args     Widget arguments.
     * @param array $instance Saved values from database.
     */
    public function widget( $args, $instance ) {
        $title = apply_filters( \'widget_title\', $instance[\'title\'] );

        echo $args[\'before_widget\'];
        if ( ! empty( $title ) )
            echo $args[\'before_title\'] . $title . $args[\'after_title\'];
        echo __( \'Hello, World!\', \'text_domain\' );
        echo $args[\'after_widget\'];
    }

    /**
     * Back-end widget form.
     *
     * @see WP_Widget::form()
     *
     * @param array $instance Previously saved values from database.
     */
    public function form( $instance ) {
        if ( isset( $instance[ \'title\' ] ) ) {
            $title = $instance[ \'title\' ];
        }
        else {
            $title = __( \'New title\', \'text_domain\' );
        }
        ?>
        <p>
        <label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e( \'Title:\' ); ?></label> 
        <input class="widefat" id="<?php echo $this->get_field_id( \'title\' ); ?>" name="<?php echo $this->get_field_name( \'title\' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
        </p>
        <?php 
    }

    /**
     * Sanitize widget form values as they are saved.
     *
     * @see WP_Widget::update()
     *
     * @param array $new_instance Values just sent to be saved.
     * @param array $old_instance Previously saved values from database.
     *
     * @return array Updated safe values to be saved.
     */
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance[\'title\'] = ( ! empty( $new_instance[\'title\'] ) ) ? strip_tags( $new_instance[\'title\'] ) : \'\';

        return $instance;
    }

} // class Foo_Widget

结束

相关推荐

Page full of widgets?

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