Статьи

50 фильтров WordPress: введение в фильтры

WordPress — это удивительная платформа и самая популярная система управления контентом в мире. Причиной этого названия является его расширяемость. В этой серии мы познакомимся с фильтрами — одним из лучших способов расширения WordPress.

В основе этой функции лежат хуки — фильтры и действия WordPress. Без них мы не смогли бы воспользоваться преимуществами расширяемого WordPress.

В этой серии мы познакомимся с фильтрами, одним из лучших способов расширения WordPress. Это будет серия из семи частей, которая фокусируется на:

  • определение фильтров WordPress и введение в их использование (статья, которую вы сейчас читаете),
  • пять статей о 50 фильтрах WordPress (по 10 в каждой статье) с примерами
  • и одна «заключительная» статья с повторением объяснения фильтров и 50 примеров.

В ядре есть — буквально — сотни фильтров WordPress, и эти 50 примеров будут только частью их (около 10%), так что может быть добавление, если вам понравятся серии и предложите новые примеры о новых фильтрах.

В любом случае, пришло время для введения фильтров WordPress. Давайте начнем!

В Кодексе фильтры определены следующим образом:

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

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

Хотя это выглядит сложной темой, фильтры (и действия) действительно легко понять. Я также был напуган, когда впервые столкнулся с ними, но, увидев, насколько они просты, я узнал сотни фильтров и действий, просто проверив Кодекс или выкопав основной код.

Вы должны определенно узнать и о сотнях фильтров. Но сначала вам нужно знать, как их использовать.

Как я уже сказал, использовать фильтры WordPress довольно просто. Есть только некоторые основные функции, которые нужно узнать, и вам нужно узнать, что делает каждый фильтр. (Честно говоря, самое сложное — это изучить все фильтры, но, как вы можете себе представить, вы не можете выучить каждый фильтр сразу — вы изучаете их, когда они вам нужны.)

В этом разделе мы рассмотрим четыре вещи:

  1. Создание функции фильтра,
  2. Подключить его к фильтру,
  3. Удаление функции из фильтра,
  4. Создание наших собственных фильтров.

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

Допустим, мы создаем плагин для удаления гласных в заголовках постов. Вместо того чтобы сказать «удалить гласные в заголовках моих постов», вы говорите «подключить эту функцию (которая удаляет гласные) к фильтру заголовков моих постов».

Сложный? На самом деле, нет. В приведенном ниже примере мы напишем код функции, которая удаляет гласные из всего :

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:

  1. login_errors
  2. comment_post_redirect
  3. allowed_redirect_hosts
  4. body_class
  5. locale
  6. sanitize_user
  7. the_content
  8. the_password_form
  9. the_terms
  10. wp_mail_from

Я действительно взволнован этой серией, и я надеюсь, что она вам понравится так же, как и мне. Если вы думаете, что можете помочь мне с учебниками, предложив больше фильтров и попросив больше примеров, не стесняйтесь рассказать мне и поделиться своими мыслями, комментируя ниже.

И если вам понравилось то, что вы прочитали в этой статье, не забудьте поделиться этим!

Увидимся в следующем уроке!