Что на самом деле делает apply_filters (…) в WordPress?

123

Я пытаюсь понять некоторые функции WordPress, но не могу понять, что на самом деле делает apply_filters (...) .

Может ли кто-нибудь прояснить мне это на нескольких примерах?

Тим
источник
12
Отлично: dev.themeblvd.com/tutorial/filters
Набиль Кадими
Примечание, которое apply_filters()является невероятно вводящим в заблуждение названием для функции, поскольку она применяет как фильтры, так и действия, привязанные к целевой функции
cameronjonesweb
@NabilKadimi, отличное предложение, dev.themeblvd.com/tutorial/filters/#highlighter_604585 , но если эта функция не принимает никаких аргументов (щелкните ссылку, чтобы узнать, о какой функции я говорю), как изменяется переменная $ output , как он описывает в следующем разделе кода?
Рамеш Парик
@RameshPareek Кажется, ваша ссылка работает не так, как ожидалось, используйте Github gist.
Nabil Kadimi
Прости! Прокрутите вниз до раздела Пример 1: Основы на этой странице.
Ramesh Pareek

Ответы:

104

apply_filters($tag, $value)передает аргумент «значение» каждой из функций, «подключенных» (использующих add_filter) к указанному «тегу» фильтра. Каждая функция выполняет некоторую обработку значения и возвращает измененное значение для передачи следующей функции в последовательности.

Например, по умолчанию (в WordPress 2.9) the_contentфильтр передает значение через следующую последовательность функций:

  • wptexturize
  • convert_smilies
  • convert_chars
  • wpautop
  • shortcode_unautop
  • prepend_attachment
  • do_shortcode
Ричард М
источник
Также не забудьте повторить все, что вы не используете, значение, если кажется, что apply_filters($value)оно стирает значение ...
MrMesees
32

поздний ответ

Краткое объяснение

apply_filters()взаимодействует с global $wp_filtersмассивом. По сути, он просто проверяет массив, если текущий фильтр (или ловушка) имеет прикрепленное действие (/ функцию обратного вызова), а затем вызывает его.

Длинное объяснение

Когда вы прикрепляете обратный вызов / действие к фильтру или ловушке, вы просто добавляете имя обратного вызова в массив глобальных фильтров. Когда затем в коде (например, в шаблоне, ядре или файле плагина) происходит вызов do_action()или apply_filters()происходит, тогда WordPress выполняет поиск по массиву и вызывает обратный вызов. Единственное, что делает фильтры более особенными, чем хуки, это то, что они возвращают значение (для дальнейшей обработки) вместо того, чтобы просто запускать обратный вызов. Итак, резюмируем: ловушки предназначены для вставки данных, а фильтры - для изменения данных.

кайзер
источник
19

Вот что я понял, учитывая наиболее популярный ответ и дополнительные ресурсы:

  • $ tag кажется синонимом названия хука. (Для меня это не особенно интуитивно.)
  • the_content - это пример ловушки типа "фильтр".
  • Хук the_content состоит из нескольких фильтров.
  • Фильтры изменяют данные. Они в основном фильтруют базу данных, изменяя данные до того, как пользователи их увидят.
  • Например, обычно применяется apply_filters (), чтобы применить фильтры the_content к $ content. В этом случае двойные возвраты будут преобразованы в <p>теги, смайлы - в значки и т. Д.
  • the_content - это ловушка, а the_content () - функция.
Марджори Розуэлл
источник
1

В самых общих чертах, apply_filters используется для инициализации ловушки фильтра ... add_filter назначает новую функцию хукам, которые уже были созданы.

Стив
источник
3
Извините, это не так: apply_filters () вызывает уже инициализированные перехватчики фильтра, а add_filter () - вызов, который создает перехватчик фильтра. Я знаю, что вы на самом деле имели это в виду, но у вас неправильные функции!
Brian C
apply_filters ($ тегов, значение $); позволяет вам создать место в вашем коде, где вы можете разрешить привязку и изменение передаваемого вами значения $ с помощью add_filter ();
Styledev