WordPress — это удивительная платформа и самая популярная система управления контентом в мире. Причиной этого названия является его расширяемость. В этой серии мы познакомимся с фильтрами — одним из лучших способов расширения WordPress.
В основе этой функции лежат хуки — фильтры и действия WordPress. Без них мы не смогли бы воспользоваться преимуществами расширяемого WordPress.
В этой серии мы познакомимся с фильтрами, одним из лучших способов расширения WordPress. Это будет серия из семи частей, которая фокусируется на:
- определение фильтров WordPress и введение в их использование (статья, которую вы сейчас читаете),
- пять статей о 50 фильтрах WordPress (по 10 в каждой статье) с примерами
- и одна «заключительная» статья с повторением объяснения фильтров и 50 примеров.
В ядре есть — буквально — сотни фильтров WordPress, и эти 50 примеров будут только частью их (около 10%), так что может быть добавление, если вам понравятся серии и предложите новые примеры о новых фильтрах.
В любом случае, пришло время для введения фильтров WordPress. Давайте начнем!
Что такое фильтр WordPress?
В Кодексе фильтры определены следующим образом:
Фильтры — это функции, через которые WordPress передает данные в определенные моменты выполнения непосредственно перед тем, как предпринимать какие-либо действия с данными. Фильтры располагаются между базой данных и браузером, а также между браузером и базой данных; Большая часть ввода и вывода в WordPress проходит как минимум через один фильтр. WordPress выполняет некоторую фильтрацию по умолчанию, и ваш плагин может добавить свою собственную фильтрацию.
Итак, по сути, фильтры — это функции, выполняющие работу с данными вашего сайта до того, как WordPress выведет их. Фильтр — это один из двух видов хуков в WordPress, другой называется действиями, которые являются темой для другой серии статей.
Хотя это выглядит сложной темой, фильтры (и действия) действительно легко понять. Я также был напуган, когда впервые столкнулся с ними, но, увидев, насколько они просты, я узнал сотни фильтров и действий, просто проверив Кодекс или выкопав основной код.
Вы должны определенно узнать и о сотнях фильтров. Но сначала вам нужно знать, как их использовать.
Использование фильтров в WordPress
Как я уже сказал, использовать фильтры WordPress довольно просто. Есть только некоторые основные функции, которые нужно узнать, и вам нужно узнать, что делает каждый фильтр. (Честно говоря, самое сложное — это изучить все фильтры, но, как вы можете себе представить, вы не можете выучить каждый фильтр сразу — вы изучаете их, когда они вам нужны.)
В этом разделе мы рассмотрим четыре вещи:
- Создание функции фильтра,
- Подключить его к фильтру,
- Удаление функции из фильтра,
- Создание наших собственных фильтров.
Создание функции фильтра и ее подключение к фильтру
Чтобы поиграть с данными, которые передаются из фильтра, вам нужно создать функцию, которая определяет, как она будет работать с данными, и подключить ее к фильтру.
Допустим, мы создаем плагин для удаления гласных в заголовках постов. Вместо того чтобы сказать «удалить гласные в заголовках моих постов», вы говорите «подключить эту функцию (которая удаляет гласные) к фильтру заголовков моих постов».
Сложный? На самом деле, нет. В приведенном ниже примере мы напишем код функции, которая удаляет гласные из всего :
1
2
3
4
5
6
7
8
|
<?php
function remove_the_vowels( $title ) {
$title = preg_replace( ‘/[aeiou]/i’, », $title );
return $title;
}
?>
|
Функция принимает строку $title
, удаляет гласные и возвращает ее. Достаточно просто, правда? Теперь давайте перейдем на следующий уровень и подключим его к фильтру:
01
02
03
04
05
06
07
08
09
10
|
<?php
function remove_the_vowels( $title ) {
$title = preg_replace( ‘/[aeiou]/i’, », $title );
return $title;
}
add_filter( ‘the_title’, ‘remove_the_vowels’ );
?>
|
Обратите внимание на новую функцию? Давайте посмотрим на add_filter()
быстро:
1
2
3
4
5
|
<?php
add_filter( $tag, $function_to_add, $priority, $accepted_args );
?>
|
- $ tag (обязательно) — имя фильтра.
- $ function_to_add (обязательно) — имя функции, которую нужно подключить к фильтру.
- $ priority (необязательно) — целое число, указывающее, когда будет выполняться наша функция. Значение по умолчанию —
10
: функция будет запускаться раньше, если вы установите ее ниже, и позже, если вы установите ее выше. - $ accept_args (необязательно) — целое число, чтобы задать количество аргументов, которые принимает фильтр. Значением по умолчанию является
1
.
Удаление фильтра
Мы также можем удалить функции, прикрепленные к фильтрам. Для этого мы используем простую функцию под названием remove_filter()
. Давайте посмотрим, как это работает:
1
2
3
4
5
|
<?php
remove_filter( $tag, $function_to_remove, $priority );
?>
|
Параметры почти такие же, как у add_filter()
:
- $ tag (обязательно) — имя фильтра.
- $ function_to_remove (обязательно) — имя функции, которую нужно удалить.
- $ priority (необязательно) — приоритет функции (как определено, когда функция была впервые подключена).
Есть также другая функция с именем remove_all_filters()
которая имеет только два параметра ( $tag
и $priority
), где вы устанавливаете имя фильтра и устанавливаете приоритет. Как следует из названия, он удаляет все функции, подключенные к фильтру.
Создание ваших собственных фильтров
Интересно, как создаются эти фильтры? Существует специальная функция apply_filters()
которая используется вокруг кода ядра для создания сотен фильтров. Конечно, его можно использовать вне ядра, а это значит, что мы можем создавать фильтры и внутри наших плагинов и тем.
Давайте посмотрим, как это работает:
1
2
3
4
5
|
<?php
apply_filters( $tag, $value, $var1, $var2 /* …and so on */ );
?>
|
- $ tag (обязательно) — имя вашего фильтра ловушка.
- $ value (обязательно) — значение, которое будет изменено функциями фильтра, подключенными через
add_filter()
. - $ var1, $ var2 и т. д. (необязательно) — параметры вашего фильтра (сколько угодно). Функции фильтра могут использовать эти параметры, но они не могут быть возвращены функциями.
Давайте подумаем о примере: представьте, что вы пишете функцию, которая возвращает только известную цитату Питера Гриффина:
1
2
3
4
5
6
7
8
|
<?php
function peter_griffin_quote() {
$quote = «The bird is the word.»;
return $quote;
}
?>
|
Если вы хотите позволить людям фильтровать эту цитату (и оставить код вашего плагина в покое), вам нужно использовать apply_filters()
следующим образом:
1
2
3
4
5
6
7
8
|
<?php
function peter_griffin_quote() {
$quote = «The bird is the word.»;
return apply_filters( ‘peter_griffin_quote’, $quote );
}
?>
|
Таким образом, другой разработчик, использующий ваш плагин, может поиграть с данными вашей функции следующим образом:
01
02
03
04
05
06
07
08
09
10
|
<?php
function change_the_quote( $quote ) {
$quote = str_replace( ‘bird’, ‘nerd’, $quote );
return $quote;
}
add_filter( ‘peter_griffin_quote’, ‘change_the_quote’ );
?>
|
Теперь, каждый раз, когда peter_griffin_quote()
функция peter_griffin_quote()
, цитата Питера будет слегка изменена без того, чтобы разработчик не редактировал ваш файл плагина. Кусок пирога!
Если вам нужна дополнительная информация по этой теме, вам следует обратиться к большому учебнику Пиппина Уильямсона по Tuts + Code: « Написание расширяемых плагинов с действиями и фильтрами ». В этом уроке вы можете узнать, как создавать фильтры и действия для вашего плагина или вашей темы.
Вывод
Чем больше вы над ними работаете, тем веселее вы пользуетесь фильтрами. Их сотни, и изучение каждого из них сделает вас на шаг ближе к тому, чтобы стать гуру WordPress. В следующей части этой серии мы познакомимся с 10 фильтрами WordPress:
-
login_errors
-
comment_post_redirect
-
allowed_redirect_hosts
-
body_class
-
locale
-
sanitize_user
-
the_content
-
the_password_form
-
the_terms
-
wp_mail_from
Я действительно взволнован этой серией, и я надеюсь, что она вам понравится так же, как и мне. Если вы думаете, что можете помочь мне с учебниками, предложив больше фильтров и попросив больше примеров, не стесняйтесь рассказать мне и поделиться своими мыслями, комментируя ниже.
И если вам понравилось то, что вы прочитали в этой статье, не забудьте поделиться этим!
Увидимся в следующем уроке!