繁体   English   中英

注意:wordpress小部件中的未定义索引

[英]Notice: undefined index in wordpress widget

我已经完成了这个小部件。 在管理区域中,当我更改变量number的值时,不会保存大小号。 在前端,我有此通知:

注意:未定义的索引:第272行的/home/masqueci/public_html/wp-content/themes/Flatnews/includes/theme-widgets.php中的数字

除标题变量外,所有其他变量均相同。

这是小部件代码:

/* CUSTOM TAG CLOUD */
class Tag_cloud extends WP_Widget {

    function Tag_cloud() {
        /* Widget settings. */
        $widget_ops = array( 'classname' => 'Tag_cloud', 'description' => __('Display tag cloud.', 'fabulous') );
        /* Widget control settings. */
        $control_ops = array( 'width' => 200, 'height' => 350, 'id_base' => 'tag_cloud' );
        /* Create the widget. */
        $this->WP_Widget( 'tag_cloud', __('Fabulous tag cloud', 'fabulous'), $widget_ops, $control_ops );
    }

    function widget( $args, $instance ) {
        extract( $args );
        /* User-selected settings. */
        $title = apply_filters('widget_title', $instance['title'] );
        $number = $instance['number'];
        $small = $instance['small'];
        $large = $instance['large'];

        /* Before widget (defined by themes). */
        echo $before_widget;

        /* Title of widget (before and after defined by themes). */
        if ( $title )
            echo $before_title . '<i class="fa fa-tags"></i>' . $title . $after_title;

            echo fab_show_tags ($small, $large, $number);

        /* After widget (defined by themes). */
        echo $after_widget;
    }

    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        /* Strip tags (if needed) and update the widget settings. */
        $instance['title'] = strip_tags( $new_instance['title'] );
        $instance['number'] = strip_tags( $new_instance['number'] );
        $instance['small'] = strip_tags( $new_instance['small'] );
        $instance['large'] = strip_tags( $new_instance['large'] );

        return $instance;
    }
    function form( $instance ) {
        /* Set up some default widget settings. */
        $defaults = array( 'title' => 'TAG CLOUD', 'number' => '10', 'small' => '8', 'large' => '12');
        $instance = wp_parse_args( (array) $instance, $defaults );
     ?>
<p>
  <label for="<?php echo $this->get_field_id( 'title' ); ?>">
    <?php _e('Title:', 'fabulous') ?>
  </label>
  <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" style="width:100%;" />
</p>

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

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

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

<?php
    }

}

我不知道有什么不好,我做过其他小部件,但我还没有遇到这个问题,我想我已经写了相同的代码。 有什么帮助吗?

您需要在调用变量之前为它们分配一个值。 不要总是假设用户会为您提供所需的所有数据。

function widget( $args, $instance ) {
        extract( $args );
        /* User-selected settings. */

        $title = null; $number = null; $small = null; $large = null;

        if (! empty( $instance['title'] ) ) { $title = apply_filters('widget_title', $instance['title'] ) }
        if (! empty( $instance['number'] ) ) { $number = $instance['number']; }
        if (! empty( $instance['small'] ) ) { $small = $instance['small']; }
        if (! empty( $instance['large'] ) ) { $large = $instance['large']; }

        /* Before widget (defined by themes). */
        echo $before_widget;

        /* Title of widget (before and after defined by themes). */
        if ( $title )
            echo $before_title . '<i class="fa fa-tags"></i>' . $title . $after_title;

            echo fab_show_tags ($small, $large, $number);

        /* After widget (defined by themes). */
        echo $after_widget;
    }

将其放在函数的顶部,如下所示:

class My_Widget extends WP_Widget {
    protected $defaults;
    function _construct(){
        $this->defaults = array(
            'title'  => '',
            'number' => 5,
            'small'  => 1,
            'large'  => 10,
        );
    }
    // etc etc rest of class functions ...
}

然后在表单函数的顶部包括以下额外的行:

function form($instance) {
    $instance = wp_parse_args( (array) $instance, $this->defaults );
    // etc etc, rest of form ...
}

显然,设置真正的默认设置可能对您有意义,但是空的默认设置至少可以删除您收到的警告和通知。

我刚刚更新了我的小部件插件。 它和您的问题相同。 这是我的答案使用的示例: http : //plugins.svn.wordpress.org/sm-sticky-featured-widget/tags/1.2.5/sticky-featured-widget.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM