В названии виджета при его вставке отображается ошибка "Notice: Undefined index: title in /home/*****/vkalendar_php.php on line 42". 42 строка: $title = apply_filters('widget_title', $instance['title']); Хотя указано имя виджета по умолчанию как "Укажите заголовок виджета". Основной код для формирования виджета PHP: class my_widget_plugin_vk_php extends WP_Widget { function __construct() { parent::__construct( 'my-widget-plugin-vk-php', 'Календарь по годам (виджет) на php', array('description' => 'Выводит таблицу календаря на php (виджет)',) ); } public function form($instance) { if (isset($instance['title'])) { $title = $instance['title']; } else { $title = 'Укажите заголовок виджета'; } ?> <p> <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>"/> </p> <?php } public function widget($args, $instance) { $title = apply_filters('widget_title', $instance['title']); //ЗДЕСЬ 42 СТРОКА С ОШИБКОЙ echo $args['before_widget']; if (!empty($title)) echo $args['before_title'] . $title . $args['after_title']; echo <<<HTML ............ HTML; echo $args['after_widget']; } public function update($new_instance, $old_instance) { $instance = array(); $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : ''; return $instance; } } function my_widget_plugin_vk_load_php() { register_widget('my_widget_plugin_vk_php'); } add_action('widgets_init', 'my_widget_plugin_vk_load_php');
проверь просто так виджет заработает, или дальше проблемы посыпятся PHP: public function widget($args, $instance) { //$title = apply_filters('widget_title', $instance['title']); $title = ' ';
@Artur_hopf, так ошибка пропала, но, как ещё вариант, хотелось бы чтобы текст, заданный по умолчанию попадал в заголовок
потому... в методе form проверяешь $instance['title'], а в методе widget нет. --- Добавлено --- и по логике методы должны принимать готовую логику с данными, а не гадать "а может этой переменной/ключа не существует?" --- Добавлено --- PHP: function my_widget_plugin_vk_load_php() { register_widget('my_widget_plugin_vk_php'); } add_action('widgets_init', 'my_widget_plugin_vk_load_php'); но судя по тому, что данные выдает сам движок, то мнение тут одно - ***л этот WP
Так разумеется её не существует по какой то причине, раз PHP выдаёт Notice Чтобы ошибки не было можно например строчку вписать if (!isset($instance['title'])) {$instance['title'] = '';} разумеется это не решит вопроса почему у Вас не выводится заголовок, зато поможет избежать последующих появлений вывода Notice. Вписывать перед с строкой в которой появляется ошибка.
MouseZver, Вы пишите "но судя по тому, что данные выдает сам движок, то мнение тут одно - ***л этот WP", я тоже считаю что не контролировать пусть даже не критичные ошибки не правильно. Эта некоторая мода которая пришла с появлением PHP 7 и которая частично ещё и стимулировалась такой CMS как Bitrix, где серверные настройки регламентированы, и установка таковых не должна приводить к появлению ошибок, что привело к тому, что разработчики модулей под эту CMS получили возможность не обращать внимания на те места где может появиться такая ошибка. Касаемо тенденции PHP на это, частично делаю такой вывод из того насколько изменилось мнение автора книги о PHP 5 и PHP 7 Дмитрия Котерова о Web разработке. То есть о тенденциях и идеологии Web-разработке в книге про PHP 5-ой версии он излагал совершенно иное мнение. Точно не скажу сейчас в каком месте, но в PHP 7 там где он про применение Composer пишет.
как я понял путем apply_filters должно было переменной просто присвоиться (отфильтроваться) текстовая переменная из массива $instance... если просто заменить PHP: $title = apply_filters('widget_title', $instance['title']); на PHP: if (isset($instance['title'])) { $title = $instance['title']; } else { $title = 'Укажите заголовок виджета'; } то вроде как всё работает, но логика ведь нарушена, так как получается что мы заново просто присвоили $title текст... а он уже был один раз указан при активации виджета в эту переменную так можно было бы просто сократить код до PHP: $title = 'Укажите заголовок виджета'; но это уже дубль --- Добавлено --- так в том то и дело что вроде как она существует .... ей уже один раз присвоили значение в public function form($instance) --- Добавлено --- это просто уберет заголовок у виджета - а мне нужно чтобы текст из админки попал в отображение на сайте
Вы пишите: "это просто уберет заголовок у виджета - а мне нужно чтобы текст из админки попал в отображение на сайте", это не так. Условие такое, если ключа массива не существует то только в этом случаи он будет создан с присвоенным значением пустой строки, если же ключ существует и в нём есть что угодно отличное от NULL в этом случаи замены не будет. Поэтому такая строка только для предотвращения ошибки Notice и она не трогает Ваши данные если они там есть, при этом из появления указанной ошибки следует, что их как раз там почему то и нет. Вы пишите: "как я понял путем apply_filters должно было переменной просто присвоиться (отфильтроваться)" - из логики работы метода думаю что так и должно. И тут нужно разбираться почему $instance['title'] не существует. --- Добавлено --- Как вариант жёсткий при этом эффективный можете посмотреть как работает функция debug_backtrace посмотреть стек вызова, а затем вписыванием в код конструкций типа var_dump($instance["title"]); найти то место где теряется Ваш заголовок и уже затем по логике метода смотреть почему это происходит.
@MouseZver, а куда это вставлять? просто для развития ) а так остановился на варианте из сообщения https://php.ru/forum/threads/oshibk...s-zadannogo-po-umolchaniju.86861/#post-628796