Вопрос или проблема
Когда я использую:
define('WP_DEBUG', 1);
В моем wp-config.php
, это работает нормально, но я взламываю старую тему и хотел бы подавить уведомления о устаревших функциях.
Я думаю, что добавление этого:
error_reporting( E_ERROR | E_NOTICE | E_PARSE )
Должно сработать. Я добавил это в wp-config.php
и в header.php
в моей теме. К сожалению, это не влияет. Может быть, это что-то, установленное на уровне сервера? Также следующее не оказывает никакого воздействия:
ini_set('display_errors', 1);
Как было спрошено в комментариях ниже, вот пара уведомлений. Я использую взломанную версию темы Construct 2, довольно старую теперь, но обновить ее было бы небезопасно. Я пытаюсь убедить клиента позволить мне переписать ее, сайт довольно простой, но так как он не видит никаких проблем, он не хочет тратить деньги.
Устарело: Присваивание возвращаемого значения новой функции по ссылке устарело в
/Volumes/Macintosh HD/Sites/MAMP (custodian)/wordpress/wp-content/themes/construct2/option-tree/ot-loader.php
на строке 369Строгие стандарты: Декларация
DropDown_Nav_Menu::start_lvl()
должна быть совместима сWalker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array)
в/Volumes/Macintosh HD/Sites/MAMP (custodian)/wordpress/wp-content/themes/construct2/dropdown-menus.php
на строке 192
Мне удалось подавить уведомления в журнале и отображаемые ошибки, используя функцию error_reporting в плагине обязательного использования, который загружается достаточно рано, чтобы поймать большинство предупреждений основного кода WP. Это полезно для предупреждений из файлов ядра или плагинов, которые не следует изменять.
Я создал PHP-файл в папке /wp-content/mu-plugins/ с этим кодом:
<?php
error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
?>
Как упомянул mmm:
в каком файле появляется первое уведомление?
Где бы ни находилось уведомление о местонахождении этой устаревшей функции (path/to/some/file.php
), введите следующее сразу после тега <?php
, который начинается в файле:
error_reporting(0);
Я пробовал вышеупомянутые функции, которые вы ввели, и вставлял их в мой wp-config.php
, когда испытывал что-то подобное, но они мне не помогли. Это отключит предупреждения, устаревшие функции, и все остальное, кроме ошибок.
Это, вероятно, самый “WordPress-способ” сделать это.
Код ДОЛЖЕН быть в файле wp-config, после WP_DEBUG (и любых других) определений, потому что этот конкретный фильтр запускается до загрузки любых плагинов.
$GLOBALS['wp_filter'] = array(
'enable_wp_debug_mode_checks' => array(
10 => array(
array(
'accepted_args' => 0,
'function' => function () {
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
// *** Это ключевая строка - измените, чтобы установить желаемое состояние ведения журнала
error_reporting( E_ALL & ~E_DEPRECATED );
ini_set( 'display_errors', defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ? 1 : 0 );
if ( in_array( strtolower( (string) WP_DEBUG_LOG ), array( 'true', '1' ), true ) ) {
$log_path = WP_CONTENT_DIR . '/debug.log';
} elseif ( is_string( WP_DEBUG_LOG ) ) {
$log_path = WP_DEBUG_LOG;
} else {
$log_path = false;
}
if ( $log_path ) {
ini_set( 'log_errors', 1 );
ini_set( 'error_log', $log_path );
}
if (
defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || defined( 'MS_FILES_REQUEST' ) ||
( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) ||
wp_doing_ajax() || wp_is_json_request() ) {
ini_set( 'display_errors', 0 );
}
}
return false;
},
),
),
));
кажется, многие плагины изменяют это значение также, поэтому у меня был успех с двумя подходами,
// попытка быть последним, кто установит это значение
add_action('wp_loaded', function() { error_reporting( E_ALL & ~E_NOTICE );
});
// еще позже, но не слишком поздно
add_action('wp', function() { error_reporting( E_ALL & ~E_NOTICE );
});
С помощью следующего кода можно просто удалить устаревшие из текущих настроек отображения ошибок. Добавив это в functions.php вашей темы, вы скроете все ошибки устаревания.
error_reporting(error_reporting() & ~E_DEPRECATED);
Вы можете сделать это так, чтобы оставалась возможность отладки, когда это необходимо :
Пример (разместите это в functions.php темы) :
add_action('wp_loaded', function() {
if(WP_DEBUG==false){
// принудительное отключение отображения ошибок
error_reporting(0);
}else {
if(WP_DEBUG==true){
// примените свои правила
error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
}
}
});
.
Ответ или решение
Подавление устаревших уведомлений в PHP-среде, и конкретно в контексте настройки WordPress, — это важная задача для ИТ-специалистов, работающих с устаревшими темами и плагинами. В данном случае, проблема состоит в том, что стандартная настройка конфигурационного файла WordPress может выводить устаревшие уведомления, которые не всегда являются критичными для выполнения скриптов, но могут засорять журналы и влиять на производительность сайта. Давайте рассмотрим, как можно эффективно подавить эти уведомления.
Теория
Устаревшие уведомления в PHP появляются при использовании функций или практик, которые больше не рекомендуются и могут быть удалены в будущих версиях PHP. Использование полной отчетности об ошибках (error_reporting(E_ALL)
) включает уведомления о каждом поведении, которое отклоняется от текущих стандартов.
WordPress, как широко используемая платформа, часто сталкивается с устаревшими предупреждениями, особенно при использовании старых тем и плагинов. Стандартный метод разработки в WordPress предполагает использование константы WP_DEBUG
для отображения ошибочных и устаревших уведомлений во время разработки.
Пример
Вы использовали следующий код в wp-config.php
для включения режима отладки:
define('WP_DEBUG', 1);
Однако вы хотите подавить сообщения об устаревших функциях, возникающие при использовании старой темы. Попытка изменить уровни отчетности об ошибках через error_reporting(E_ERROR | E_NOTICE | E_PARSE)
в wp-config.php
или в файле header.php
темы не дала ожидаемых результатов. Также настройка ini_set('display_errors', 1);
не привела к изменению ситуации.
Приведенные выше примеры показывают, что часто простое добавление или изменение кодов в файлах тем или конфигурации может быть неэффективным, поскольку настройки могут быть переопределены серверными установками или другими плагинами.
Применение
-
Создание Must-Use Плагина:
Создание must-use плагина является одним из эффективных способов подавления устаревших уведомлений. Такие плагины загружаются на ранних этапах и имеют больший приоритет, чем стандартные плагины. Создайте PHP файл в директории
/wp-content/mu-plugins/
со следующим содержимым:<?php error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
Данный подход позволяет подавлять устаревшие уведомления на уровне всей платформы.
-
Использование Фильтра WordPress:
Вы можете использовать предоставленный фильтр WordPress для настройки отчетности об ошибках до загрузки плагинов:
$GLOBALS['wp_filter'] = array( 'enable_wp_debug_mode_checks' => array( 10 => array( array( 'accepted_args' => 0, 'function' => function () { if (defined('WP_DEBUG') && WP_DEBUG) { error_reporting(E_ALL & ~E_DEPRECATED); ini_set('display_errors', 0); } return false; }, ), ), ), );
Этот код следует размещать после всех объявлений констант в
wp-config.php
. -
Подавление Уведомлений в Конкретных Скриптах:
Если проблема заключается в определенном файле, вставьте следующий код сразу после тега
<?php
в этом файле:error_reporting(0);
Это окончательно отключит все уведомления для данного файла, что может быть полезным в специфических случаях.
-
Динамическое Управление Отчетностью:
Добавление динамического управления в
functions.php
может предоставить гибкость, которая необходима для переключения между различными уровнями отчетности в зависимости от условий:add_action('wp_loaded', function() { if (WP_DEBUG === false) { error_reporting(0); } else { error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE); } });
Таким образом, будет активирована минимальная необходимая отчетность об ошибках в зависимости от текущей ситуации.
Подводя итог, подавление устаревших уведомлений в WordPress требует понимания того, как и когда PHP обрабатывает ошибки. Разработка с учетом устаревших предупреждений способствует не только улучшению качества кода, но и стабильности работающей системы. Выбор подхода, который лучше всего соответствует вашим конкретным условиям и требованиям, является первым шагом к реализации чистого, быстрого и безопасного окружения для разработки и эксплуатации.