Функция _doing_it_wrong()
в WordPress используется для обнаружения неправильно вызванных функций и позволяет разработчикам получать предупреждения о некорректном использовании кода. Она активна только при включенном режиме отладки (WP_DEBUG
= true) и позволяет добавлять сообщение, объясняющее ошибку, а также версию WordPress, с которой стало некорректным использование функции. При вызове она генерирует уведомление через PHP-функцию trigger_error()
.
_doing_it_wrong( string $function_name, string $message, string $version )
Параметры
$function_name
— (строка) Название вызываемой функции, где произошло неправильное использование.$message
— (строка) Сообщение, описывающее, что было сделано неправильно.$version
— (строка) Версия WordPress, с которой это действие стало некорректным.
Пример базового использования
_doing_it_wrong( 'example_function', 'Function should not be used in this way.', '5.9.0' );
Пример 1: Ошибка в вызове функции на неправильном хуке
Предположим, что у нас есть функция register_custom_route()
, которая должна быть вызвана на определенном хуке. Если эта функция вызывается до инициализации REST API (хука rest_api_init
), мы выводим сообщение о неправильном вызове.
function register_custom_route() {
if ( ! did_action( 'rest_api_init' ) ) {
_doing_it_wrong(
'register_custom_route',
'REST API routes should be registered on the rest_api_init hook.',
'5.2.0'
);
}
}
Пример 2: Ошибка при отсутствии глобальной переменной
Функция is_custom_archive()
требует наличия глобальной переменной $wp_query
. Если она вызывается раньше ее инициализации, отобразим предупреждение.
function is_custom_archive() {
global $wp_query;
if ( ! isset( $wp_query ) ) {
_doing_it_wrong(
__FUNCTION__,
'The $wp_query global variable must be set before calling is_custom_archive().',
'4.5.0'
);
return false;
}
return $wp_query->is_archive();
}
Пример 3: Логирование ошибок с использованием doing_it_wrong_run
для анализа стека вызовов
С помощью хука doing_it_wrong_run
можно расширить обработку ошибок и логировать их для дальнейшего анализа. В этом примере мы записываем стек вызовов в лог, что позволяет лучше понимать, откуда возникла ошибка.
Добавим следующий код в файл functions.php
:
add_filter( 'doing_it_wrong_trigger_error', 'log_doing_it_wrong_errors' );
function log_doing_it_wrong_errors( $trigger ) {
if ( $trigger ) {
error_log( print_r( wp_debug_backtrace_summary( null, null, false ), true ) );
}
return $trigger;
}
Пример 4: Исключение некоторых функций из логирования ошибок
Если требуется избежать логирования для определенных функций, можно указать их имена и исключить их из записей.
add_filter( 'doing_it_wrong_trigger_error', 'conditional_doing_it_wrong_logging' );
function conditional_doing_it_wrong_logging( $trigger ) {
if ( $trigger ) {
$exclude_functions = ['function_to_ignore', 'another_function'];
$backtrace = wp_debug_backtrace_summary( null, null, false );
foreach ( $exclude_functions as $exclude ) {
if ( in_array( $exclude, $backtrace, true ) ) {
return false;
}
}
error_log( print_r( $backtrace, true ) );
}
return $trigger;
}
Заключение
Функция _doing_it_wrong()
помогает разработчикам выявлять и исправлять ошибки, связанные с неправильным использованием кода.