wp_debug_backtrace_summary()
Получает трассировку с названиями функций — список названий всех функций/методов, которые были вызваны для того, чтобы добраться до текущего места в коде (откуда была вызвана эта функция).
Список выводится в виде названий функций через запятую или в виде массива.
Работает на основе PHP функции debug_backtrace().
Хуков нет.
Возвращает
Строку|Массив. Названия функций через запятую или массив названий где самая ближайшая функция будет находится в 0 элементе массива.
Использование
wp_debug_backtrace_summary( $ignore_class, $skip_frames, $pretty );
- $ignore_class(строка)
- Название класса, который нужно пропустить в списке. Все методы указанного класса не будут показаны в результате.
По умолчанию: null - $skip_frames(число)
- Кол-во элементов (названий функций, классов), которые нужно пропустить. Пропускаться будут ближайшие названия (последний, которые находятся ближе к концу стэка).
По умолчанию: 0 - $pretty(true/false)
Какой результат нужен?
true— строка со списком названий.false— массив со списком названий.
По умолчанию: true
Примеры
#1 Демонстрация того что выводит фукнция
Для примера, подключимся на хук pre_get_posts и посмотрим что вернет wp_debug_backtrace_summary() с разными параметрами:
add_filter( 'pre_get_posts', 'my_function' );
function my_function(){
$backtrace = wp_debug_backtrace_summary();
/*
require('/sites/test.ru/wp-blog-header.php'), wp, WP->main, WP->query_posts, WP_Query->query,
WP_Query->get_posts, do_action_ref_array, WP_Hook->do_action, WP_Hook->apply_filters, my_function
*/
// Уберм методы класса 'WP_Hook'
$backtrace = wp_debug_backtrace_summary( 'WP_Hook' );
/*
require('/sites/test.ru/wp-blog-header.php'), wp, WP->main, WP->query_posts, WP_Query->query,
WP_Query->get_posts, do_action_ref_array, my_function
*/
// Уберм 5 последних элементов
// При подсчете элементов параметр `$ignore_class` не учитывается, т.е. элементы считаются как будто `$ignore_class=null`.
$backtrace = wp_debug_backtrace_summary( 'WP_Hook', 5 );
//> require('/sites/test.ru/wp-blog-header.php'), wp, WP->main, WP->query_posts, WP_Query->query
// получим массив
$backtrace = wp_debug_backtrace_summary( 'WP_Hook', 5, false );
/*
Array(
[0] => WP_Query->query
[1] => WP->query_posts
[2] => WP->main
[3] => wp
[4] => require('/sites/test.ru/wp-blog-header.php')
)
*/
} #2 Изменим формат времени в виджете "Свежие записи"
К сожалению, в виджете "Свежие записи" нет никаких специальных хуков, чтобы изменить формат отображения даты и времени, но мы можем использовать следующую хитрость:
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 'G:i';
}
return $pre_option;
} ); #3 Добавим в лог цепочку вызовов
Допустим, нам нужно добавить сообщение об ошибке в наш логер. В этом случае было бы удобно вместе с сообщением об ошибке, иметь также стэк вызовов функций/методов которые привели к этой ошибке:
function some_function(){
// какой-то код где может появится ошибка
if( is_wp_error() ){
$logger->error( 'Error message.', [ 'backtrace' => wp_debug_backtrace_summary() ] );
return;
}
// do staff
}
Заметки
Список изменений
| С версии 3.4.0 | Введена. |