Получить список всех зарегистрированных действий
Я пытаюсь отладить плагин, который я не разрабатывал, и хочу получить список всех зарегистрированных действий. Я прочитал эту тему на SO:
Но это относится только к одному хуку и касается фильтров, а не действий.
Существует ли какая-нибудь переменная наподобие $wp_filter
или что-то подобное?
Фильтры и действия назначаются на хуки. Функции, назначенные на хуки, хранятся в глобальной переменной $wp_filter
. Поэтому всё, что нужно сделать — это вывести её с помощью print_r
.
print_r($GLOBALS['wp_filter']);
P.S. Функция add_action
вызывает add_filter
. А та, в свою очередь, выполняет $wp_filter[$tag][$priority][$idx]
.
ПРИМЕЧАНИЕ: вы можете напрямую добавить этот код в functions.php, и на вашем сайте появится отладочная информация:
add_action('wp', function(){ echo '<pre>';print_r($GLOBALS['wp_filter']); echo '</pre>';exit; } );

хорошо, но где я могу их отладить? я попробовал добавить if(WP_DEBUG == true){ global $wp_filter; print_r($wp_filter); } в index.php и получил NULL

Оригинальный вопрос связан с хуками типа action.
...Но он относится к одному конкретному хуку и касается фильтров, а не действий.
Есть ли какая-то переменная, например, $wp_filter или что-то подобное?
Итак, ответ — Да, такая переменная есть. Это глобальная переменная $wp_actions
.
Смотрите файл wp-includes/plugin.php примерно на строке 31 (для WP 6.4.2), где переменная $wp_actions
объявляется как global
...без какого-либо описания.
Прокрутите вниз до функции function do_action()
. Ознакомьтесь с их doc-block.
* @global int[] $wp_actions Хранит количество срабатываний каждого действия.
Итак, эта переменная предназначена для хранения количества срабатываний хуков типа action.
Для тех, кто попал на эту страницу из поисковой системы и ищет сработавшие фильтры — да, они находятся в $wp_filters
, а не в $wp_filter
.
Чтобы увидеть, какие действия были вызваны, в вашем коде подключитесь к хуку shutdown
(или любому другому, который не срабатывает слишком рано), а затем...
global $wp_actions;
echo '<pre>'.htmlspecialchars(print_r($wp_actions, true)).'</pre>';
