Лучше решить проблему, а не подавить предупреждающее сообщение.
Проблема эта линия:
if(isset($canonical) && $canonical)
Использование isset($canonical)
прекрасно, однако вы напрямую, используя ту же переменную в том же объеме, что является причиной сообщения.
Изменить его к этому:
<?php if(isset($canonical)): ?>
<link rel="canonical" href="<?= $canonical ?>" />
<?php endif; ?>
Вам не нужно дополнительное && $canonical
при условии, что у вас нет кода, который бы когда-либо инициализировать переменную $canonical
к нулевому или порожнем состоянии.
Другие советы: 1. Используйте <?php
вместо <?
«короткие теги» из-за конфликта символов с объявлениями XML. Я понимаю, что по умолчанию в новых версиях PHP отключены короткие теги. Обратите внимание, что разрешается указывать <?= ?>
(для echo
). 2. Используйте синтаксис if: endif;
, чтобы сделать код визуализации страницы более удобным.
http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index – aioobe
@aioobe связанный вопрос не отвечает на этот вопрос. – Madbreaks