如何实现带数据验证的控件错误输出?

时间:2017-02-12 作者:TrubinE

告诉我如何更新小部件并检查字段,以便在数据填写不正确的情况下实现输出错误。

它可能已经构建了功能?

class My_Widget extends WP_Widget {

/**
 * Sets up the widgets name etc
 */
public function __construct() {
    $widget_ops = array( 
        \'classname\' => \'my_widget\',
        \'description\' => \'My Widget is awesome\',
    );
    parent::__construct( \'my_widget\', \'My Widget\', $widget_ops );
}

/**
 * Outputs the content of the widget
 *
 * @param array $args
 * @param array $instance
 */
public function widget( $args, $instance ) {
    echo $args[\'before_widget\'];        
    echo $instance[\'title\'];
    echo $args[\'after_widget\'];
}

/**
 * Outputs the options form on admin
 *
 * @param array $instance The widget options
 */
public function form( $instance ) {
    $title = ! empty( $instance[\'title\'] ) ? $instance[\'title\'] : esc_html__( \'New title\', \'text_domain\' );
    ?>
    <p>
    <label for="<?php echo esc_attr( $this->get_field_id( \'title\' ) ); ?>"><?php esc_attr_e( \'Title:\', \'text_domain\' ); ?></label> 
    <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( \'title\' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( \'title\' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
    </p>
    <?php 
}

/**
 * Processing widget options on save
 *
 * @param array $new_instance The new options
 * @param array $old_instance The previous options
 */
    public function update( $new_instance, $old_instance ) {


    // !!!!!!!
    if(empty($new_instance[\'title\'])){
    // !!!!!
    // How to make it clear to the user that he incorrectly filled field?
    // !!!!!
return \'Error!\';    
    }}}
问题函数“更新($new\\u instance,$old\\u instance)”

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

尝试以下操作:

class My_Widget extends WP_Widget {

    /**
     * Sets up the widgets name etc
     */
    public function __construct() {
        $widget_ops = array(
            \'classname\' => \'my_widget\',
            \'description\' => \'My Widget is awesome\',
        );
        parent::__construct(\'my_widget\', \'My Widget\', $widget_ops);
    }

    /**
     * Outputs the content of the widget
     *
     * @param array $args
     * @param array $instance
     */
    public function widget($args, $instance) {
        echo $args[\'before_widget\'];
        echo $instance[\'title\'];
        echo $args[\'after_widget\'];
    }

    /**
     * Outputs the options form on admin
     *
     * @param array $instance The widget options
     */
    public function form($instance) {

        $title = !empty($instance[\'title\']) ? $instance[\'title\'] : esc_html__(\'New title\', \'text_domain\');
        if(isset($instance[\'error\'])){
            echo $instance[\'error\'];
        }
        ?>
            <p>
            <label for="<?php echo esc_attr($this->get_field_id(\'title\')); ?>"><?php esc_attr_e(\'Title:\', \'text_domain\'); ?></label> 
            <input class="widefat" id="<?php echo esc_attr($this->get_field_id(\'title\')); ?>" name="<?php echo esc_attr($this->get_field_name(\'title\')); ?>" type="text" value="<?php echo esc_attr($title); ?>">
            </p>
        <?php
    }

    /**
     * Processing widget options on save
     *
     * @param array $new_instance The new options
     * @param array $old_instance The previous options
     */
    public function update($new_instance, $old_instance) {

        // !!!!!!!
        if (empty($new_instance[\'title\'])) {
            $instance[\'error\'] = "ERROR!! title empty";
        }else{
            $instance[\'title\'] = strip_tags( $new_instance[\'title\'] );
        }
        return $instance;
    }

}
您还可以检查error 中的值widget function 表示数据无效,小部件数据需要更新。

相关推荐

Displaying Widgets

在主题开发期间,我了解如何在functions.php 文件然而,当谈到在主题中显示小部件时,是否有一种首选的方式来显示它们-primary,使用the_widget() 功能与dynamic_sidebar() 作用