После обновления WordPress до версии 6.7 мой debug.log заполонили ошибки _load_textdomain_just_in_time. Ругается, как на мои плагины, так и плагины из репозитория. Даже на WooCommerce. Что это за ошибка, насколько все серьезно и как решить?
Это ошибка вызвана тем, что мы загружаем строки для перевода раньше отработки действия init. Правильно переводы должны загружаться при выполнении действия init или позже.
Игнорирование ошибки серьезно не должно влиять. Это скорее уведомление для улучшение кода. Поэтому волноваться, что что-то сломается не стоит.
Как исправить?
В своих плагинах это можно решить тем, чтобы навесить функцию вызова перевода на действие init
add_action( 'init', function() {
load_plugin_textdomain( 'plugin-textdomain', false, dirname( plugin_basename(__FILE__) ) . '/languages/' );
});Но это спасет нас от наших ошибок, но не править же все сторонние плагины. Поэтому можно написать следующий код, который будет игнорировать данную ошибку при добавлении в debug.log
add_filter('doing_it_wrong_trigger_error', function ($status, $function_name) {
if ('_load_textdomain_just_in_time' === $function_name) {
return false;
}
return $status;
}, 10, 2);Но тут есть нюанс, что фильтр doing_it_wrong_trigger_error срабатывает слишком поздно, если вставить в functions.php темы.
Лучший вариант — это использовать must-use плагин (MU-плагин), так как MU-плагины загружаются раньше всех обычных плагинов и темы.
Вывод
Данное уведомление призвано воспитать более аккуратное написание кода, но при этом ничего не ломает, а только раздражает мусором в дебаге.
