WP_DEBUG не установлен, но предупреждения всё равно появляются
Если WP_DEBUG не установлен, как я понимаю, вы никогда не должны видеть предупреждения. Но на некоторых сайтах на определенных серверах я всё равно вижу несколько предупреждений. Не все предупреждения, которые отображались бы при включенном WP_DEBUG, а только некоторые из них.
Я пытался изменить уровень ошибок в php.ini, но это, похоже, не влияет на то, появляются предупреждения или нет, хотя они появляются в разном количестве на разных серверах (т.е. нет предупреждений на разработке, одно предупреждение на стейджинге и несколько предупреждений на продакшене).

Перефразируя wp-includes/load.php: if(WP_DEBUG)error_reporting(E_ALL). Но действительно кажется, что несколько плагинов вмешиваются в error_reporting и display_errors, хотя им, вероятно, не следует этого делать.

Также возможно, что эта строка уже установлена в false. В этом случае вы увидите следующий код:
define('WP_DEBUG', false);
В любом случае вам нужно заменить эту строку следующим кодом:
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
Не забудьте сохранить изменения и загрузить файл wp-config.php обратно на сервер.

В среде WordPress обычно нет необходимости использовать ini_set
, потому что это уже достигается с помощью определенных констант, предоставляемых ядром WordPress. Как работает PHP: некоторые настройки могут быть переопределены в вашей CMS (WordPress), в отдельных скриптах и даже на основе пользователя или директории (что часто вызывает разочарование у веб-хостов и агентств).
Чтобы отключить отображение ошибок на странице в WordPress, единственная настройка, которая вам действительно нужна, это:
define('WP_DEBUG', false);
...потому что, когда WP_DEBUG
отключен, дополнительные опции становятся неактивными:
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);
Учтите, что запутывающая опция WP_DEBUG_LOG
относится только к созданию файла debug.log
в директории wp-content
и не влияет на другие настройки логирования и т. д.
Повторим: настройки в WordPress могут переопределять стандартные настройки PHP, поэтому ваши настройки PHP не так важны, как правильные настройки в файле wp-config.php
, который загружается до других компонентов WordPress.
Тем не менее, в продакшене рекомендуется реализовать стандартные настройки, как показано ниже:
error_reporting = E_ERROR | E_WARNING | E_PARSE
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/www/logs/error.log
log_errors_max_len = 1024
ignore_repeated_errors = On
ignore_repeated_source = Off
report_memleaks = On
xmlrpc_errors = 0
html_errors = Off
Для полного примера обратитесь к нашему файлу SlickStack php.ini, оптимизированному для Nginx и PHP-FPM.
В одном случае, после нескольких часов исследований, мы обнаружили, что плагин (или тема) переопределял различные настройки обработки ошибок, ранее установленные в php.ini
и wp-config.php
. Единственный способ предотвратить это — удалить WordPress-плагин или тему, которая пытается "взломать" ваши настройки PHP, или попросить их удалить это, потому что это очень плохая практика, когда расширения переопределяют отладочные настройки вашей CMS.
В SlickStack мы создали Bash-скрипт, который "помечает" любые строки ini_set
и error_reporting
в PHP-файлах директорий /themes/
и /plugins/
, выделяя такие случаи с помощью MU-плагина (PHP-скрипта), который отображает список таких "взломов" в админ-панели WordPress.

Попробуйте отключить/подавить все предупреждения и уведомления об ошибках в вашем файле wp-config.php
(в самом начале). В любом случае: ошибки — это не плохо. Они дают вам возможность исправить свой код.

Ни одно из вышеперечисленных решений мне не помогло.
Для меня решением стало добавление php-файла в папку mu-plugins. Просто создайте php-файл и добавьте следующую строку.
error_reporting(E_ALL & ~( E_NOTICE ));
После этого загрузите его в папку mu-plugins (если папка не существует, создайте её в папке wp-content).
