Функция wp_debug_backtrace_summary()
возвращает информацию о функциях, которые были вызваны до текущего места в коде. Эта функция полезна для отладки и диагностики, так как помогает определить, какие функции вызвали текущую, и в каком порядке они были вызваны. Результат может быть представлен либо в виде строки, содержащей названия функций через запятую, либо в виде массива.
wp_debug_backtrace_summary( string $ignore_class = null, int $skip_frames, bool $pretty = true ): string|array
Параметры
$ignore_class
Тип:string
Опционально.
Название класса, методы которого должны быть проигнорированы в выводе. Это позволяет исключить ненужные классы из трассировки.$skip_frames
Тип:int
Опционально.
Количество пропускаемых уровней стека. Полезно для пропуска начальных вызовов и фокусировки на более глубоких уровнях.Значение по умолчанию:0
.$pretty
Тип:bool
Опционально.
Определяет, в каком формате должен быть возвращен результат: строка с именами функций через запятую (еслиtrue
) или массив (еслиfalse
).Значение по умолчанию:true
.
Возвращаемое значение
string|array
Либо строка с именами функций через запятую, либо массив с названиями функций.
Пример 1: Просмотр цепочки вызовов функций
Подключаемся к фильтру pre_get_posts
и получаем полную цепочку вызовов с использованием wp_debug_backtrace_summary()
.
add_filter( 'pre_get_posts', 'example_function' );
function example_function() {
$backtrace = wp_debug_backtrace_summary();
error_log( $backtrace );
// Пример вывода: require('/path/wp-blog-header.php'), wp, WP->main, WP->query_posts, my_function
}
Пример 2: Исключение методов класса WP_Hook
В этом примере мы исключаем все вызовы методов класса WP_Hook
из трассировки, чтобы отобразить только другие функции.
$backtrace = wp_debug_backtrace_summary( 'WP_Hook' );
error_log( $backtrace );
// Пример вывода: require('/path/wp-blog-header.php'), wp, WP->main, WP->query_posts
Пример 3: Пропуск определенного количества вызовов
Здесь мы пропускаем пять последних вызовов из стека.
$backtrace = wp_debug_backtrace_summary( 'WP_Hook', 5 );
error_log( $backtrace );
// Пример вывода: require('/path/wp-blog-header.php'), wp, WP->main
Пример 4: Получение трассировки в виде массива
Если указать третий параметр как false
, функция вернет результат в виде массива, что может быть удобнее для программной обработки.
$backtrace_array = wp_debug_backtrace_summary( null, 0, false );
print_r( $backtrace_array );
/* Пример вывода:
Array
(
[0] => my_function
[1] => WP_Query->get_posts
[2] => WP->main
)
*/
Пример 5: Настройка формата даты в виджете «Свежие записи»
Чтобы изменить формат даты в виджете «Свежие записи», мы можем отфильтровать pre_option_date_format
, проверив, что вызов идет из метода WP_Widget_Recent_Posts->widget
.
add_filter( 'pre_option_date_format', function( $pre_option ) {
$backtrace = wp_debug_backtrace_summary( null, 0, false );
if ( in_array( 'WP_Widget_Recent_Posts->widget', $backtrace ) ) {
return 'd-m-Y';
}
return $pre_option;
} );
Пример 6: Логирование стека вызовов
При логировании ошибок может быть полезно сохранить стек вызовов. Это позволит быстрее разобраться в причинах ошибки.
function log_error_with_backtrace() {
if ( is_wp_error() ) {
error_log( 'Ошибка: ' . wp_debug_backtrace_summary() );
}
}
Заключение
Функция wp_debug_backtrace_summary()
— мощный инструмент для диагностики в WordPress. Она дает представление о последовательности вызовов функций и позволяет исключать ненужные классы или уровни стека.