sruly
  • 0
Новичок

Разница между фильтрами и хуками действий?

  • 0

Недавно я более подробно изучил API плагинов, и мне было интересно , какие реальные различия существуют между хуками действий и фильтров. Оба они являются событиями, которые получают данные в качестве параметра, и, похоже, оба они могут делать одни и те же вещи.

Очевидно, я вижу, что действия вызываются, когда происходят действия, а фильтры вызываются, когда данные манипулируются, но, похоже, это просто семантическая разница в именах.

Помимо семантики и того, для чего они используются, какие между ними существуют реальные различия?

Share
  1. Привет @Sruly :

    Вы в значительной степени ответили на свой вопрос, но я немного уточню.

    Хуки действия

    Хуки действий предназначены для использования, когда ядро ​​WordPress, какой-либо плагин или тема дают вам возможность вставить свой код в определенный момент и выполнить одно или несколько из следующих действий:

    1. Используйте echo для вставки некоторого HTML или другого содержимого в буфер ответа,
    2. Изменить состояние глобальной переменной для одной или нескольких переменных и/или
    3. Измените параметры, переданные вашей функции ловушки (при условии, что ловушка была вызвана do_action_ref_array() вместо, do_action() поскольку последняя не поддерживает передачу переменных по ссылке ).

    Хуки фильтра

    Перехватчики фильтров ведут себя очень похоже на перехватчики действий, но их предполагаемое использование — получение значения и, возможно, возврат измененной версии значения. Ловушку фильтра также можно использовать так же, как и хук действия, т.е. для изменения глобальной переменной или генерации некоторого HTML, предполагая, что это то, что вам нужно сделать, когда вызывается хук. Одна очень важная вещь в перехватчиках фильтров, о которой вам не нужно беспокоиться с перехватчиками действий, заключается в том, что человек, использующий перехватчик фильтров, должен возвращать (модифицированную версию) первый переданный параметр. Распространенная ошибка новичка — забыть вернуть это значение!

    Использование дополнительных параметров для предоставления контекста в обработчиках фильтров

    Кроме того, я чувствовал, что хуки фильтров в более ранних версиях WordPress были затруднены, потому что они получали только один параметр; т.е. они получат значение для изменения, но не 2-й или 3-й параметры для предоставления какого-либо контекста. В последнее время, и это хорошо, кажется, что основная команда WordPress с радостью (для меня) добавила дополнительные параметры к хукам фильтров, чтобы вы могли обнаружить больше контекста. Хорошим примером является posts_where крючок; Я полагаю, что в нескольких версиях назад он принимал только один параметр, являющийся текущим запросом класса «где» SQL, но теперь он принимает как предложение «где », так и ссылку на текущий экземпляр WP_Query класса, который вызывает хук.

    Так в чем реальная разница?

    На самом деле хуки-фильтры — это в значительной степени надмножество хуков действий. Первый может делать все, что может второй, и даже немного больше, хотя разработчик не несет ответственности за возврат значения с помощью хука действия, который он или она делает с помощью хука фильтра.

    Давать указания и сообщать о намерениях

    Но это, наверное, не главное. Я думаю, что важно то, что разработчик, решивший использовать хук действия вместо хука фильтра или наоборот, сообщает о своем намерении и, таким образом , дает указания разработчику темы или плагина, который может использовать хук. По сути, они говорят либо «Я позвоню вам, сделайте все, что вам нужно», ИЛИ «Я передам вам это значение для изменения, но убедитесь, что вы передали его обратно ».

    Так что, в конечном счете , я думаю, что руководство, обеспечиваемое выбором типа крючка, является реальной ценностью различия. ИМО, во всяком случае.

    Надеюсь это поможет!

    • 0
  2. Если вы посмотрите на источник add_action() основной функции, это просто оболочка для add_filter() функции…

    И если вы посмотрите на do_action() основную функцию, она очень похожа на apply_filters() основную функцию с одним очень важным отличием: она не возвращает значение.

    Итак, что это значит? действия похожи на фильтры, за исключением того, что действие не возвращает значение, поэтому вы не можете изменять данные. Это показывает, что было просто создать механизм действия WordPress, просто скопировав механизм фильтра и не возвращая значение. По сути, все, что вы можете сделать с действием, — это просто выполнить функцию без изменения какого-либо значения.

    • 0
  3. Простыми словами.

    Действия — это те функции PHP, которые выполняют вывод.

    Фильтры — это те функции PHP, которые возвращают результат.

    Обновлено: мы можем расширить любой плагин, использующий действия и фильтры, без изменения кода. Добавляя фильтры и действия в нашу собственную тему или плагин.


    Как использовать?

    Действие:

    Проверьте ниже простые примеры в functions.php файле вашей темы.

    1. Пример первый: (простой пример PHP)
    функциональный тест () {
         эхо "Выход";
    }
    
    тестовое задание();
    

    Над программой распечатайте вывод:

    Выход
    

    [ПРИМЕЧАНИЕ: Здесь test() просто вызывает функцию. И выполните функцию обратного вызова «тест».]


    1. Пример второй: (простое использование действия)
    функция test1() {
         эхо "Выход";
    }
    add_action('тест', 'тест1');
    
    do_action('тест');
    

    Над программой распечатайте вывод:

    Выход
    

    [ПРИМЕЧАНИЕ: здесь do_action('test') работает как функция вызова. И выполните функцию обратного вызова «test1».]


    1. Пример третий: (другое использование действий)
    функция test2() {
         эхо "Тест 2";
    }
    add_action('тест', 'тест2', 1);
    
    функция test1() {
         эхо "Тест 1";
    }
    add_action('тест', 'тест1', 2);
    
    do_action('тест');
    

    Над программой распечатайте вывод:

    Тест 2Тест 1
    

    [ПРИМЕЧАНИЕ: здесь do_action('test') работает как функция вызова. И выполнять функции обратного вызова по своим приоритетам.

    Функция обратного вызова «test1» имеет приоритет 2, а «test2» имеет приоритет 1. ]

    Если приоритеты меняются, например, «test1» с приоритетом 1 и «test2» с приоритетом 2, тогда вывод будет:

    Тест 1Тест 2
    

    1. Пример четвертый: (сторонняя поддержка) Добавьте приведенный ниже код вfunctions.php
    функция test1() {
         do_action('test_before');
         эхо "Тест 1";
         do_action('test_after');
    }
    add_action('тест', 'тест1');
    
    do_action('тест');
    

    Над программой распечатайте вывод:

    Тест 1
    

    Теперь создайте образец плагина, чтобы проверить, как он работает для стороннего разработчика.

    1. Создайте папку «простая» в /wp-content/plugins/ каталоге.
    2. Создайте файл с именем «simple.php» и добавьте приведенный ниже код.
    /*
    * Название плагина: Простой плагин
    */
    функция test_callback_function() {
         echo "Из плагина";
    }
    add_action('тест', 'test_callback_function');
    

    Теперь активируйте наш простой плагин из панели администратора WordPress.

    Перейти к плагину меню и активировать его.

    После активации плагина над программой распечатайте вывод:

    Тест 1Из плагина
    

    [ПРИМЕЧАНИЕ: если мы добавим приоритет для действия нашего плагина от 1 до 9, он напечатает вывод, например:

    Из плагинаТест 1
    

    Потому что WordPress учитывает 10 priority by default все добавленные действия.]

    Фильтры

    Проверьте приведенные ниже примеры:

    Простой пример PHP:

    $data = массив('один', 'два');
    print_r($данные);
    

    Над программой распечатайте вывод:

    Массив ( [0] => один [1] => два)
    
    1. Пример первый: (простое использование фильтра)
    $data = apply_filters('my_filter_name', array('один', 'два'));
    print_r($данные);
    
    add_filter('my_filter_name', функция($old_data) {
         возвращаемый массив('три', 'четыре');
    });
    

    Над программой распечатайте вывод:

    Массив ( [0] => три [1] => четыре)
    

    Здесь мы добавили фильтр my_filter_name и изменили существующий вывод array( 'one', 'two' ) без array( 'three', 'four' ) изменения файлов темы/плагина.


    • 0
  4. Основное различие между действием и фильтром можно резюмировать следующим образом:

    • действие принимает полученную информацию, что-то с ней делает и ничего не возвращает. Другими словами: он действует на что-то, а затем завершается, ничего не возвращая вызывающему хуку.
    • фильтр берет полученную информацию, каким-то образом модифицирует ее и возвращает. Другими словами: он что-то фильтрует и передает обратно на хук для дальнейшего использования.

    Сказал по-другому:

    • действие прерывает поток кода, чтобы что-то сделать, а затем возвращается к нормальному потоку без каких-либо изменений;
    • фильтр используется для изменения чего-либо определенным образом, чтобы впоследствии эта модификация использовалась кодом.

    То, о чем идет речь, — это список параметров, отправленный через определение хука.

    Из официальной документации WP

    • 0

Оставить ответ

You must login to add an answer.