Widget类中的UPDATE方法如何从Select标记中保存$Instance数组?

时间:2021-05-11 作者:Marina Dunst

遵循教程,效果很好。我只是不明白update方法是如何从Select标记在数据库中保存$instance数组的?您可以在管理区域中选择默认或完全、平滑保存,并将其保存在db中。

   public function widget( $args, $instance ) {
      echo $args[\'before_widget\'];

          echo \'<div class="g-ytsubscribe"       
              data-layout="\'.$instance[\'data_layout\'].\'" 
              data-count="default">
            </div>\';
      
      echo $args[\'after_widget\'];
    }

    public function form( $instance ) {
      $data_layout = ! empty( $instance[\'data_layout\'] ) ? $instance[\'data_layout\'] : esc_html__( \'default\', \'yts_domain\' );
      ?>
      
      
      <select class="widefat" 
        <option value="default" <?php echo ($data_layout == \'default\' ? \'selected\' : \'\'); ?>>Default</option>
        <option value="full" <?php echo ($data_layout == \'full\' ? \'selected\' : \'\'); ?>>Full</option>
      </select>
      
      }
      
    public function update( $new_instance, $old_instance ) {
      $instance = array();

      $instance[\'data_layout\'] = ( ! empty( $new_instance[\'data_layout\'] ) ) ? sanitize_text_field( $new_instance[\'data_layout\'] ) : \'\';

      return $instance;
    }

1 个回复
SO网友:Jacob Peattie

创建小部件时,您正在扩展WP_Widget 类别:

class Foo_Widget extends WP_Widget {
数据库中值的实际保存由父类在update_callback() 方法

因此,您的小部件需要做的就是告诉它新的值,您可以通过定义update() 方法

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'