Получить список всех зарегистрированных действий

2 июл. 2013 г., 17:47:20
Просмотры: 56.2K
Голосов: 44

Я пытаюсь отладить плагин, который я не разрабатывал, и хочу получить список всех зарегистрированных действий. Я прочитал эту тему на SO:

Но это относится только к одному хуку и касается фильтров, а не действий.

Существует ли какая-нибудь переменная наподобие $wp_filter или что-то подобное?

4
Комментарии

Используйте этот плагин, чтобы визуально отображать хуки на странице https://wordpress.org/plugins/show-hooks/

Rafiq Rafiq
23 июн. 2020 г. 16:46:56

и вы являетесь разработчиком этого плагина, верно?

alexwc_ alexwc_
24 авг. 2020 г. 05:57:40

Да, я создал этот плагин для себя, а затем разместил его в WordPress.

Rafiq Rafiq
25 авг. 2020 г. 18:59:24

@Rafiq вам следует удалить ссылку на show-hooks, так как она больше не действительна.

Prof. Moriarty Prof. Moriarty
1 дек. 2023 г. 20:37:37
Все ответы на вопрос 2
4
60

Фильтры и действия назначаются на хуки. Функции, назначенные на хуки, хранятся в глобальной переменной $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; } );
2 июл. 2013 г. 17:52:11
Комментарии

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

Jacer Omri Jacer Omri
2 июл. 2013 г. 17:57:07

моя ошибка, не нужно было писать global $wp_filter;

Jacer Omri Jacer Omri
2 июл. 2013 г. 18:03:39

ОК, значит ты разобрался?

Krzysiek Dróżdż Krzysiek Dróżdż
2 июл. 2013 г. 18:12:55

Не используйте хук wp, если у вас возникают проблемы с памятью. Разместите код без хука в файле functions.php.

jMike jMike
11 сент. 2022 г. 12:21:33
1

Оригинальный вопрос связан с хуками типа 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>';
24 дек. 2023 г. 15:50:52
Комментарии

Спасибо! Принятый ответ вызывал ошибки памяти, даже с 32 ГБ. И массив был заполнен нерелевантной информацией.

Zade Zade
22 сент. 2024 г. 23:05:48