Как исправить: "Notice: Undefined offset: 0"?
Я создаю сайт на WordPress и столкнулся с проблемой в некоторых записях.
Эта проблема затрагивает только 2 из 4 статей, и после исследования я не могу найти причину этого.
Это сообщение об ошибке появляется прямо под секцией комментариев:
Notice: Undefined offset: 0 in /home/***/public_html/wp-includes/class-wp-query.php on line 3152
Когда я ищу эту строку, я нахожу следующую функцию:
Я искал эту функцию в коде WordPress и нашел только несколько совпадений:
grep -r rewind_posts *
wp-content/themes/magazine/themify/themify-wp-filters.php: rewind_posts();
wp-includes/class-wp-query.php: $this->rewind_posts();
wp-includes/class-wp-query.php: public function rewind_posts() {
wp-includes/feed-rdf.php:<?php rewind_posts(); while (have_posts()): the_post(); ?>
wp-includes/query.php:function rewind_posts() {
wp-includes/query.php: $wp_query->rewind_posts();
Судя по этим результатам, существует две разных реализации функции rewind_post
в query.php
и class-wp-query.php
.
Есть только два места, где вызывается эта функция. Я сосредоточился на том, что связано с используемой темой, themify-wp-filters.php
, Она вызывается из функции: function themify_404_template
. Это не говорит о многом, потому что я не просматриваю страницу 404.
В настоящее время я использую плагин Super Socializer, но я не включал функцию социальных комментариев.
Есть какие-нибудь идеи?
Вы ищете причину PHP-уведомления в файлах ядра WordPress, но это пустая трата времени, потому что: 1) сомнительно, что вы обнаружили новую ошибку в WordPress, 2) не стоит изменять файлы ядра WordPress для исправления проблем темы или плагина, и 3) ошибка вызвана темой или плагином, а не ядром WordPress, хотя в уведомлении указаны файлы ядра.
Кроме того, это всего лишь PHP-уведомление, а не ошибка или фатальная ошибка. Оно просто говорит: "Эй, посмотри на меня, возможно, тебе стоит меня исправить, но я не ошибка." Прочитайте https://stackoverflow.com/questions/4624474/php-difference-between-notice-and-warning
УВЕДОМЛЕНИЕ (NOTICE): Это сообщение говорит о том, что вам следует или не следует делать.
ПРЕДУПРЕЖДЕНИЕ (WARNING): Возникает во время выполнения, но не прерывает работу кода.
ОШИБКА (ERROR): Также возникает во время выполнения, но выполнение программы прекращается.
Поэтому проверьте файл wp-config.php и отключите режим отладки, чтобы не видеть уведомлений: https://codex.wordpress.org/Debugging_in_WordPress. Или проверьте php.ini в вашем хостинг-аккаунте: https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display
Для более эффективного поиска причины PHP-ошибки или уведомления используйте Debug, как указано выше. Но самый простой способ — деактивировать все плагины и поочередно активировать их, пока не найдете тот, который вызывает уведомление. Затем обратитесь за помощью к разработчику плагина или поищите в их форумах. Если проблема не в плагине, переключитесь на стандартную тему WordPress и проверьте, записано ли уведомление в логах ошибок с помощью wp_debug
.

Если есть уведомление PHP, значит в коде есть ошибка, которая вызывает это уведомление. Очевидно, объект wp_query создан некорректно или был изменен каким-то непредвиденным образом. Но если ядро WordPress не может гарантировать целостность объекта, оно должно проверять существование индекса в массиве перед доступом к нему и/или выдавать более понятную ошибку. Автор вопроса просто выполнил отладку в пределах своего понимания, что оказалось недостаточно, но это не оправдывает утверждение, что уведомления не являются ошибками...

Отличная работа, @markratledge! Я бы также добавил эту ссылку: http://stackoverflow.com/questions/6549561/notice-undefined-offset-0-in

Спасибо за ответ, @markratledge, я очень ценю это.
Я не осознавал, что столкнулся с ошибкой PHP, а не WordPress. Наверное, это ошибка новичка.
Ваше предложение отключить режим DEBUG в wp-config.php
напомнило мне, что я включил этот режим несколько дней назад. Возможно, уведомление было всегда, но я не видел его раньше, потому что DEBUG был отключен.
Я искренне благодарен вам, потому что вы помогли мне лучше понять, как работает WordPress. Спасибо.
P.S. Я попытаюсь найти корневую причину этой проблемы, но рад, что могу ее скрыть.

Недавно я провел анализ функции rewind_posts
.
>grep -r rewind_posts *
wp-content/themes/magazine/themify/themify-wp-filters.php: rewind_posts();
wp-includes/class-wp-query.php: $this->rewind_posts();
wp-includes/class-wp-query.php: public function rewind_posts() {
wp-includes/feed-rdf.php:<?php rewind_posts(); while (have_posts()): the_post(); ?>
wp-includes/query.php:function rewind_posts() {
wp-includes/query.php: $wp_query->rewind_posts();
Скорее всего, проблема не в ядре WordPress, так как ведущие разработчики WordPress не допустили бы таких ошибок.
Исходя из опыта, разработчики тем иногда забывают очищать код, поэтому проблема может быть в:
wp-content/themes/magazine/themify/themify-wp-filters.php:
Использование rewind_posts
без проверки условий с помощью if()
.
Тема должна содержать такие проверки в зависимости от того, что пытаются перемотать.
У меня нет кода, поэтому я не могу сказать больше. Вы можете отправить эту проблему в поддержку темы.

Привет @prosti, как я уже писал выше, я удалил все плагины и убедился, что это проблема темы. Я свяжусь с поддержкой Themify на случай, если они смогут помочь.
