Что такое «все» в isset ($ wp_filter ['all'])

10

Я новичок в WordPress. Я пытаюсь понять, как он генерирует страницы XHTML. Я предполагаю, что это функция do_action( 'hook-name' ), но я застрял с пониманием инструкции isset( $wp_filter['all] )при чтении функции do_action, потому что я не понимаю, что означает слово all.

Это функция PHP или WordPress?

Нгуен Мак
источник

Ответы:

9

allэто просто строка, которую разработчики WordPress выбрали не так, как другие. Когда вы присоединяетесь к all, ваш обратный вызов сработает для всех других хуков .

Я бы не стал тратить слишком много времени на поиск источника do_action, просто знаю, что:

  1. add_action( 'x', 'whatever' )будет означать whateverпожары дляdo_action( 'x' )
  2. add_action( 'all', 'whatever' )будет означать whateverпожары для каждого do_action , независимо от названия крючка.
TheDeadMedic
источник
5

Условно 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.

прости
источник