Привет @Sruly :
Вы в значительной степени ответили на свой вопрос, но я немного уточню.
Action Hooks
Хуки действий предназначены для использования, когда ядро WordPress или какой-либо плагин или тема дают вам возможность вставить свой код в определенный момент и выполнить одно или несколько из следующих действий:
- Используйте
echo
для вставки некоторого HTML или другого содержимого в буфер ответов,
- Изменить состояние глобальной переменной для одной или нескольких переменных и / или
- Измените параметры, передаваемые в вашу функцию ловушки (при условии, что ловушка была вызвана
do_action_ref_array()
вместо, do_action()
так как последняя не поддерживает передачу переменных по ссылке .)
Крючки фильтра
Фильтры-зацепки ведут себя очень похоже на Action-зацепки, но они предназначены для получения значения и, возможно, для возврата измененной версии значения. Хук фильтра также можно использовать точно так же, как хук действий, т. Е. Для изменения глобальной переменной или генерации некоторого HTML, предполагая, что это то, что вам нужно сделать, когда вызывается хук. Одна вещь, которая очень важна в Filter Hooks, о которой вам не нужно беспокоиться с Action Hooks, это то, что человек, использующий Filter Hooks, должен вернуть (измененную версию) первый параметр, который был передан. Распространенная ошибка новичка - забыть вернуть это значение!
Использование дополнительных параметров для обеспечения контекста в хуках фильтров
Кроме того, я чувствовал, что фильтр-хуки блокировались в более ранних версиях WordPress, потому что они получали только один параметр; то есть они получат значение, которое нужно изменить, но не будут иметь 2-го или 3-го параметра, чтобы обеспечить какой-либо контекст. Однако в последнее время и, что положительно, кажется, что основная команда WordPress с радостью (для меня) добавила дополнительные параметры в фильтр-хуки, чтобы вы могли узнать больше контекста. Хороший пример - posts_where
крючок; Я полагаю, что в нескольких версиях назад он принимал только один параметр, являющийся классом SQL текущего запроса «где», но теперь он принимает и предложение where, и ссылку на текущий экземпляр WP_Query
класса, который вызывает ловушку.
Так в чем же реальная разница?
На самом деле Filter Hooks - это в значительной степени расширенный набор Action Hooks. Первый может делать все, что может делать второй, и, более того, разработчик не обязан возвращать значение с помощью Action Hook, что он или она делает с Filter Hook.
Давать руководство и телеграфный замысел
Но это, вероятно, не то, что важно. Я думаю, что важно то, что разработчик, решивший использовать Action Hook вместо Filter Hook или наоборот, телеграфирует свои намерения и тем самым дает рекомендации разработчикам или разработчикам плагинов, которые могут использовать ловушку. По сути, они говорят: «Я позвоню вам, сделайте все, что вам нужно» ИЛИ «Я передам вам это значение для изменения, но будьте уверены, что вы передадите его обратно ».
В конечном счете, я думаю, что руководство, обеспечиваемое выбором типа крючка, является реальной ценностью, стоящей за этим различием . ИМО, во всяком случае.
Надеюсь это поможет!
Если вы посмотрите на источник для
add_action()
основной функции, это просто оболочка дляadd_filter()
функции ...И если вы посмотрите на
do_action()
базовую функцию, она очень похожа наapply_filters()
базовую функцию, но с одним ключевым отличием: она не возвращает значение.Так что это значит? действия подобны фильтрам, за исключением того, что действие не возвращает значение, поэтому вы не можете изменять данные. Это показывает, что было легко создать механизм действия WordPress, просто скопировав механизм фильтра, а не возвращая значение. По сути, все, что вы можете сделать с действием, - это просто выполнить функцию без изменения какого-либо значения.
источник
Простыми словами.
Обновлено: мы можем расширить любой плагин, который использует действия и фильтры без изменения там кода. Добавляя фильтры и действия в нашей собственной теме или плагине.
Как пользоваться?
Действие:
Ниже приведены простые примеры в вашем
functions.php
файле темы .Над программой выведите вывод:
[ПРИМЕЧАНИЕ: здесь test () просто вызывает функцию. И выполните функцию обратного вызова 'test'.]
Над программой выведите вывод:
[ПРИМЕЧАНИЕ: здесь
do_action('test')
работает как вызов функции. И выполните функцию обратного вызова 'test1'.]Над программой выведите вывод:
[ПРИМЕЧАНИЕ: здесь
do_action('test')
работает как вызов функции. И выполнять функции обратного вызова по своим приоритетам.Функция обратного вызова «test1» имеет приоритет 2, а «test2» имеет приоритет 1.]
Если приоритеты изменяются как «test1» с приоритетом 1 и «test2» с приоритетом 2, то результат будет:
functions.php
Над программой выведите вывод:
Теперь создайте пример плагина, чтобы проверить, как он работает для стороннего разработчика.
/wp-content/plugins/
каталоге.Теперь активируйте наш простой плагин из панели администратора WordPress.
Перейти в плагин меню и активировать его.
После активации плагина над программой распечатайте вывод:
[ПРИМЕЧАНИЕ: если мы добавим приоритет для нашего действия плагина от 1 до 9, тогда он напечатает вывод как:
Потому что WordPress учитывает
10 priority by default
все добавленные действия.]фильтры
Проверьте следующие примеры:
Простой пример PHP:
Над программой выведите вывод:
Над программой выведите вывод:
Здесь мы добавили фильтр
my_filter_name
и изменить существующий выходarray( 'one', 'two' )
сarray( 'three', 'four' )
без изменения темы / плагина файлов.источник