[英]WP Plugin I get Notice: Undefined index: error when creating widget “instance” not defined
Been updating an old but one of my favorite unsupported plugins. 正在更新旧但我最喜欢的不受支持的插件之一。 I have made all the functions current and the plugin works well just a couple bugs to fix when running in
define('WP_DEBUG', true);
我已经将所有功能设为当前功能,并且该插件运行良好,仅在运行
define('WP_DEBUG', true);
时出现了几个错误即可修复define('WP_DEBUG', true);
So this plugin try's to load defaults but I get errors creating a new widget weather or not there is a default ad. 因此,此插件尝试加载默认值,但在创建新的小部件天气时出现错误,或者没有默认广告。 I have been searching for a better way to do this with no luck.
我一直在寻找更好的方法来做到这一点,但没有运气。 The problem is the
$instance['name']
remains undefined until the widget is saved. 问题是直到保存小部件之前,
$instance['name']
仍未定义。 would appreciate any help Thank You 将不胜感激任何帮助,谢谢
Errors I Get one instance of this 错误我得到一个这样的实例
Notice: Undefined index: name in /var/www/public_html/wp-content/plugins/advertising-manager/lib/Advman/Widget.php on line 56 注意:未定义的索引:第56行上的/var/www/public_html/wp-content/plugins/advertising-manager/lib/Advman/Widget.php中的名称
I get this for each result 我得到每个结果
Notice: Undefined index: name in /var/www/public_html/wp-content/plugins/advertising-manager/lib/Advman/Widget.php on line 58 注意:未定义的索引:第58行的/var/www/public_html/wp-content/plugins/advertising-manager/lib/Advman/Widget.php中的名称
Here Is The Code Widget php 这是代码小部件php
<?php
class Advman_Widget extends WP_Widget
{
function Advman_Widget()
{
$widget_ops = array('classname' => 'Advman_Widget', 'description' => __('Place an ad', 'advman'));
parent::__construct('advman', __('Advertisement', 'advman'), $widget_ops);
}
function widget($args, $instance)
{
extract($args); //nb. $name comes out of this, hence the use of $n
global $advman_engine;
$n = $instance['name'] == '' ? $advman_engine->getSetting('default-ad') : $instance['name'];
$ad = $advman_engine->selectAd($n);
if (!empty($ad)) {
$suppress = !empty($instance['suppress']);
$title = apply_filters('widget_title', $instance['title']);
$ad_code = $ad->display();
echo $suppress ? ($title . $ad_code) : ($before_widget . $before_title . $title . $after_title . $ad_code . $after_widget);
$advman_engine->incrementStats($ad);
}
}
function update($new_instance, $old_instance)
{
$instance = $old_instance;
$instance['title'] = strip_tags(stripslashes($new_instance['title']));
$instance['suppress'] = !empty($new_instance['suppress']);
$instance['name'] = $new_instance['name'];
return $instance;
}
function form($instance)
{
global $advman_engine;
$ads = $advman_engine->getAds();
$names = array();
// Loop through ads, and get only unique ad names
foreach ($ads as $ad) {
$names[$ad->name] = $ad->name;
}
$title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
$checked = !empty($instance['suppress']) ? 'checked="checked"' : '';
?>
<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:', 'advman'); ?> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></label></p>
<p>
<label for="<?php echo $this->get_field_id('name'); ?>"><?php _e('Select an ad to display:', 'advman'); ?>
<select class="widefat" id="<?php echo $this->get_field_id('name'); ?>" name="<?php echo $this->get_field_name('name'); ?>">
<option value=""<?php echo $instance['name'] == "" ? " selected='selected'" : ''; ?>><?php _e('Default Ad', 'advman'); ?></option>
<?php foreach ($names as $name) : ''?>
<option value="<?php echo $name; ?>"<?php echo $name == $instance['name'] ? " selected='selected'" : ''; ?>>#<?php echo $name; ?></option>
<?php endforeach; ?>
</select>
</label>
</p>
<p><label for="<?php echo $this->get_field_id('suppress'); ?>"><?php _e('Hide widget formatting', 'advman'); ?> <input class="checkbox" id="<?php echo $this->get_field_id('suppress'); ?>" name="<?php echo $this->get_field_name('suppress'); ?>" type="checkbox" <?php echo $checked; ?> /></label></p>
<?php
}
}
?>
I found my problem sometimes it helps to do something else for a while 我发现我的问题有时会帮助做一段时间
I was using isset() on an assignment before any selections could be made 在进行任何选择之前,我正在分配上使用isset()
My Fix 我的修复
// I Added
if(!isset($instance['name']) || empty($instance['name'])) {
$instance['name'] = "";
//Added it here
$title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
if(!isset($instance['name']) || empty($instance['name'])) {
$instance['name'] = "";
}
$checked = !empty($instance['suppress']) ? 'checked="checked"' : '';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.