Условно if ( isset($wp_filter['all']) ) {
вы можете найти прямо в этих функциях создания ловушек:
apply_filters
apply_filters_ref_array
do_action
do_action_ref_array
Разница между ними заключается в количестве отправленных аргументов. Либо нам нужно несколько аргументов, ref_array
либо один аргумент. Другое отличие «действие против фильтра» простое: действие может выполнять любую функцию / действие, а имя фильтра обычно зарезервировано для функций, которые принимают строковые данные и возвращают эти отфильтрованные данные.
Хорошо, вот как вы создаете хуки. И у ловушек есть имена, и вы можете использовать несколько имен функций для одного и того же имени ловушки (читай: тег).
Но как только вы определите все функции, связанные с определенными хуками, вам нужно где-то хранить все имена хуков и имена связанных функций. Вот почему мы global $wp_filter
в WordPress. Если вы выведете эту переменную, вы получите что-то вроде ...
Array
(
[pre_term_name] => Array
(
[10] => Array
(
[sanitize_text_field] => Array
(
[function] => sanitize_text_field
[accepted_args] => 1
)
[wp_filter_kses] => Array
(
[function] => wp_filter_kses
[accepted_args] => 1
)
)
[30] => Array
(
[_wp_specialchars] => Array
(
[function] => _wp_specialchars
[accepted_args] => 1
)
)
)
Что ж, давайте не будем спорить с именем этой переменной. Лично я бы назвал это по-другому, вероятно, $wp_hooks
так как это имя не занято. Однако, если мы вернемся в истории мы находим do_action
это так @since 1.2.0
и apply_filters
будет @since 0.71
(выпущен 9 июня 2003 года). Это дает вам довольно хорошее объяснение, почему это называется $wp_filter
. Это наиболее вероятно, потому что фильтры были впервые введены в WordPress. Позже они представили действия.
Просто опираясь на сказанное от @TheDeadMedic ...
add_action ('all', 'what') будет означать, что срабатывает для каждой операции do_action, независимо от имени хука.
Я поднял вопрос, зачем нам это нужно $wp_filter['all']
? Всего несколько примеров. Самоанализ, тестирование и, возможно, больше внутренних функций системы в будущих версиях WordPress.