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 | Введена. |