WordPress как на ладони
wordpress jino

apply_filters() WP 0.71

Применяет прикрепленную к указанному фильтру 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 );

Код apply filters: wp-includes/plugin.php WP 4.8.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;
}

Cвязанные функции

Из метки: Фильтры (хуки)

Еще из раздела: Хуки: события, фильтры

apply_filters 5 комментариев
  • Denis cайт: hixon.ru

    Добрый день, Тимур. Где вы читаете доки по хукам? Знаю только сайт http://adambrown.info/p/wp_hooks/version/3.3, но там не у всех хуков есть хоть какое-то описание.
    Спасибо.

    Ответить5.6 лет назад #
    • Kama4464

      Это кажется единственный источник, за исключением некоторых хуков, описанных в кодексе или еще где-то. Те что не описаны, я ищу в коде - процесс не быстрый...

      Ответить5.6 лет назад #
      • linca cайт: tobolsk-gid.ru

        Че то нифига не понял. Как работает?
        На оф сайте нашел: https://developer.wordpress.org/reference/functions/apply_filters/

        // Our filter callback function
        function example_callback( $string, $arg1, $arg2 ) {
        	// (maybe) modify $string
        	return $string;
        }
        add_filter( 'example_filter', 'example_callback', 10, 3 );
        
        /*
         * Apply the filters by calling the 'example_callback' function we
         * "hooked" to 'example_filter' using the add_filter() function above.
         * - 'example_filter' is the filter hook $tag
         * - 'filter me' is the value being filtered
         * - $arg1 and $arg2 are the additional arguments passed to the callback.
        $value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );

        Это получается если я вешаю функцию на add_filter, то потом я могу в переменную записать форматированное значение через apply_filters?

        Ответить1.5 года назад #

Здравствуйте, !

Ваш комментарий