apply_filters

Применяет прикрепленную к указанному фильтру PHP функцию. Прикрепляется функция с помощью add_filter().

Используется там, где нужно изменить значение переменной (например текст).

Используется в плагинах и темах, для создания хуков-фильтров (зацепок пользовательских функций).

Новые фильтры должны иметь уникальные названия и не должны совпадать с уже имеющимися в WP названиями фильтров.

Кроме фильтров в WP есть еще события (actions), принцип работы такой же. Разницы лишь в том, что фильтр должен вернуть полученную переменную, т.е. он фильтрует (изменяет) данные, а событие позволяет запустить пользовательскую функцию в момент срабатывания этого события. События запускаются функцией do_action()
✈ 1 раз = 0.000016с = очень быстро | 50000 раз = 0.04с = скорость света

Хуков нет.

Возвращает

Отфильтрованное значение $value, которое передается функции-обработчику хука.

Использование

apply_filters( $tag, $value, $var ... );
$tag(строка) (обязательный)
Название фильтра.
По умолчанию: нет
$value(строка/массив/число/объект/логический) (обязательный)
Значение, которое будет передаваться функции в её первом аргументе, другими словами – значение, которое нужно отфильтровать.
По умолчанию: нет
$var(строка/массив/число/объект/логический)
Дополнительные значения, которые будет передавать фильтр функции.
По умолчанию: нет

Примеры

#1. Вывод на экран после фильтрации:

echo apply_filters( $tag, $value );

#2. Получение отфильтрованного значения:

$myvar = apply_filters( $tag, $value );

#3. Дополнительные аргументы:

$myvar = apply_filters( $tag, $value, $var1, $var2, ... );

#4. Пример вывода отформатированного контента записи через фильтр.

Альтернатива функции the_content():

global $post;
echo apply_filters( 'the_content', $post->post_content );

Код из


wp-includes/plugin.php

WP 4.7.2

<?php
function apply_filters( $tag, $value ) {
	global $wp_filter, $wp_current_filter;

	$args = array();

	// Do 'all' actions first.
	if ( isset($wp_filter['all']) ) {
		$wp_current_filter[] = $tag;
		$args = func_get_args();
		_wp_call_all_hook($args);
	}

	if ( !isset($wp_filter[$tag]) ) {
		if ( isset($wp_filter['all']) )
			array_pop($wp_current_filter);
		return $value;
	}

	if ( !isset($wp_filter['all']) )
		$wp_current_filter[] = $tag;

	if ( empty($args) )
		$args = func_get_args();

	// don't pass the tag name to WP_Hook
	array_shift( $args );

	$filtered = $wp_filter[ $tag ]->apply_filters( $value, $args );

	array_pop( $wp_current_filter );

	return $filtered;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *