小部件中启用了WP调试的未定义索引错误

时间:2018-06-18 作者:The WP Intermediate

我已将WP debug设置为true,并收到错误消息→

注意:未定义索引:勾选\\u snippet\\u类型

<p>
    <input
        type="radio"
        <?php checked( $instance[ \'tick_the_snippet_type\' ], \'tick_snippet_4\' ); ?>
        id="<?php echo $this->get_field_id( \'tick_snippet_4\' ); ?>"
        name="<?php echo $this->get_field_name(\'tick_the_snippet_type\'); ?>"
        value="tick_snippet_4"
    />
    <label for="<?php echo $this->get_field_id( \'tick_snippet_4\' ); ?>">The Widget #3</label>
</p>
这是引发错误的行→

<?php checked( $instance[ \'tick_the_snippet_type\' ], 
这有什么解决办法?

按要求更新代码→

public function update($new_instance, $old_instance) {
    $instance = $old_instance;  
    $instance[\'tick_the_snippet_type\'] = $new_instance[\'tick_the_snippet_type\'];
    return $instance;
}

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

每当使用数组中的值时,如$array[\'key\'] 在可能的情况下\'key\' 不存在(例如第一次使用小部件)您需要在使用它之前检查它是否存在,否则在未设置它的情况下会出现错误。

您的问题是,当小部件第一次添加\'tick_the_snippet_type\' 上不存在$instance, 所以你需要考虑这种可能性。我建议创建一个要传递给的变量checked() 其中包含tick_the_snippet_type 或默认值(如果不存在):

if ( isset( $instance[\'tick_the_snippet_type\'] ) ) {
    $value = $instance[\'tick_the_snippet_type\'];
} else {
    $value = false;
}
可以用ternary operator:

$value = isset( $instance[\'tick_the_snippet_type\'] ) ? $instance[\'tick_the_snippet_type\'] : false;
然后将其用于检查:

<?php checked( $value, \'tick_snippet_4\' ); ?>

结束

相关推荐

PHP 7.0更新到7.1和至少7.2

我想最终将WP的php从7.0版本升级到7.2版本。例如,SG optimizer在尝试升级到php 7.1时给出错误这些是:以下插件/主题与PHP 7.1不兼容。Html5 Audio PlayerSee Errors FILE: /var/www/html/wp-content/plugins/html5-audio-player/inc/follow.php ---------------------------------------------------------------