Одна из функций, входящих в часть функционала хуков в WordPress.
Суть этой функции в том, что где-то в коде, который пользователю изменять не стоит (например потому что тогда не получится спокойно обновляться), висит эта функция, определяющая название фильтра и благодаря ей, уже при помощи add_filter(), на этот фильтр мы можем повесить дополнительные функции, которые приведут переменную $value
к тому значению, которое нам и нужно.
Незаменима при создании хорошего плагина.
apply_filters( $tag, $value, $arg, $arg1 ... )
- $tag
- (строка) Собственно это и есть название фильтра — на него мы и будем вешать произвольную функцию при помощи add_filter(). Название должно быть уникальным.
- $value
- (число|строка|массив|объект) Сама переменная, отфильтрованное значение которой функция должна будет возвратить. Результат действия функции
apply_filters()
не обязательно присваивать переменной с тем же самым названием. - $arg
- Одна или несколько дополнительных переменных, которые будут переданы в нашу произвольную (возвратную) функцию.
Пример использования функции при фильтрации контента поста
Довольно простой пример и я его уже рассматривал когда-то. Вы возможно знаете, что содержимое поста можно вывести разными способами. И вполне возможно вы также знаете, что есть функция get_the_content(), возвращающая неотфильтрованный контент поста, и the_content(), которая как раз таки выводит отфильтрованный контент. Под отфильтрованным содержимом поста я имею ввиду, что к нему применены все шорткоды, произведены соответветствующие замены, например -
на —
и так далее.
Так вот, при помощи функции apply_filters()
мы можем сами вручную отфильтровать контент из функции get_the_content().
$content_no_filter = get_the_content(); // содержимое поста неотфильтрованное $content_filter_applied = apply_filters( 'the_content', $content_no_filter ); // отфильтрованное
Пошаговый пример создания своего собственного фильтра
Всё начинается с переменной, на которую мы должны воздействовать извне. Переменная может быть обычным числовым значением, может быть объектом, а может быть HTML-кодом например какого-нибудь виджета.
У меня для простоты примера пусть это будет числовая переменная.
$number = 100;
Теперь же допустим я хочу задать какой-нибудь дополнительный параметр, под воздействием которого переменная будет меняться. Опять-таки для простоты примера возьму простое строковое значение.
$arg1 = 'больше'; // эта переменная допустим также может принимать значение 'меньше'
Теперь объединяем эти два листинга и вешаем фильтр.
$number = 100; $arg1 = 'больше'; $number = apply_filters( 'misha_filter_name', $number, $arg1 );
А теперь сама фильтрующая функция, которую мы подвесим при помощи add_filter().
add_filter( 'misha_filter_name', 'misha_filter_function', 10, 2 ); // цифра 10 это приоритет приоритет выполнения функции (нужен, если фильтрующих функций несколько) // 2 это количество всех параметров функции, в данном случае $number и $arg1 // 10 и 1 - значения по умолчанию соответственно function misha_filter_function( $number, $arg1 ) { if( $arg1 == 'больше' ) $number = $number + 50; if( $arg1 == 'меньше' ) $number = $number - 50; return $number; }
Как результат, получаем изменённое значение переменной. Если у вас есть трудности или вопросы по работе apply_filters()
, оставляйте комментарий, обязательно помогу вам разобраться.