apply_filters() — позволяет повесить фильтр на значение переменной

Одна из функций, входящих в часть функционала хуков в 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(), оставляйте комментарий, обязательно помогу вам разобраться.

Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.