add_filter() WP 0.71

Прикріплює вказану PHP функцію до вказаного фільтра. Так, під час спрацьовування фільтра значення буде опрацьовано зазначеною PHP функцією.

Фільтри це, свого роду, зачіпки всередині коду, через які можна “відфільтрувати” будь-які дані. Наприклад, у період отримання та виведення тексту на екран із бази даних, можна “на льоту” змінити (відфільтрувати) цей текст і вивести на екран вже змінений варіант тексту. І завдяки фільтру для цього нам не доведеться редагувати функцію виведення у файлах движка, а можна підключитися до функції виведення через файл шаблону, використавши заздалегідь передбачений розробниками фільтр.

Функція не робить жодних перевірок: чи існує функція, що прикріплюється, чи передається назва функції у вигляді рядка і т.д.. Зроблено це, щоб add_filter() працювала максимально швидко.

Базовий список фільтрів весь список фільтрів

Про фільтри та події читайте у цій замітці: як працюють хуки у WordPress

Основа для:
add_action()
1 раз – 0.000015 сек
(дуже швидко) | 50000 разів – 0.05 сек
(швидкість світла) |
PHP 7.0.8, WP 4.7

Хуків немає.

Повертає

true.

Використання

add_filter( $tag, $function_to_add, $priority, $accepted_args );
$tag
(рядок) (обов’язковий)
Назва фільтра, для якого спрацьовуватиметься функція визначена у параметрі $function_to_add.
$function_to_add
(рядок) (обов’язковий)
Назва функції, яка спрацьовуватиме для зазначеного в попередньому параметрі фільтра. Назва функції необхідно вказувати як рядка:
'название_функции'. Для функцій усередині класів вказуємо масив:
array('название_класса', 'название_функции'), Докладніше читаємо
тут (знання англ. Вітаються).
$priority
(число)
Пріоритет виконання функцій для одного і того ж фільтра. Чим більше число, тим пізніше буде виконуватися функція: наприклад, спочатку 10 потім 20. Функції з однаковим пріоритетом будуть виконуватися в порядку їхнього додавання до масиву фільтрів.


Типово: 10
$accepted_args
(число)
Кількість аргументів, що передаються фільтром функції. Деякі фільтри можуть передавати більше ніж 1 аргумент, допустимо – 2, для таких випадків потрібно вказувати 2 у цьому параметрі.


За замовчуванням: 1

Приклади

1

#1 Усередині класів функцію фільтра потрібно вказувати через масив:

Перше значення масиву – це екземпляр класу, а друга назва методу цього класу.

add_filter( 'media_upload_newtab', array( $this, 'media_upload_mycallback') );

Якщо метод статичний, то першому значенні масиву потрібно вказати назву класу:

add_filter( 'media_upload_newtab', array( 'My_Class', 'media_upload_mycallback') );
0

#2 Звичайний приклад, що показує як можна додати будь-який напис наприкінці кожної статті, через фільтр the_content:

add_filter( 'the_content', 'add_text_to_content' );
function add_text_to_content($content){
	$out = $content. "<p>При копіюванні статті, ставте зворотне посилання, будь ласка!</p>";
	return $out;
}
0

#3 Зміни блоку «підпис картинки» (сaption)

Приклад зміни підпису у картинок ( [сaption] ) під стандарти HTML 5. Функція змінює контент чіпляється на фільтр img_caption_shortcode, який відповідає за перетворення шоткоду [сaption] у контенті статті. Щоб отримати всі 3 параметри, що передаються фільтром, вкажемо аргумент $accepted_args – 3:

add_filter( 'img_caption_shortcode', 'my_img_caption_shortcode_filter', 10, 3);
/**
 * Фільтр замінює шоткод [сaption] під стандарти HTML5
 *
 * @Повертає HTML текст описуючий тег figure
 **/
function my_img_caption_shortcode_filter( $val, $attr, $content = null ){
	extract(shortcode_atts(array(
		'id' => '',
		'align' => '',
		'width' => '',
		'caption' => ''
	), $ Attr));

	if ( 1 > (int) $width || empty($caption) )
		return $val;

	$capid = '';
	if ($id) {
		$id = esc_attr($id);
		$capid = 'id="figcaption_'. $id . '" ';
		$id = 'id="' . $id . '" aria-labelledby="figcaption_' . $id . '" ';
	}

	return '<figure'. $id. 'class="wp-caption ' . esc_attr($align) . '" style="width: '
	. (10 + (int) $ width) . 'px">' . do_shortcode( $content ) . '<figcaption ' .
	. 'class="wp-caption-text">' . $caption . '</figcaption></figure>';
}
0

#4 Функцію можна передавати як анонімну:

Пам’ятайте, що неможливо видалити фільтр, оголошений анонімною функцією.

Не використовуйте анонімну функцію як коллбек функції, якщо мається на увазі багаторазове використання фільтра

add_filter( 'the_title', function( $title ){
	return '<b>'. $title. '</b>';
});

нотатки

  • Global. WP_Hook[]. $wp_filter A multidimensional array all hooks і callbacks hooked to them.

список змін

З версії 0.71Введено.

Код add_filter() WP 6.0.2

function add_filter( $hook_name, $callback, $priority = 10, $accepted_args = 1 ) {
	Global $wp_filter;

	if ( ! isset( $wp_filter[ $hook_name ] ) ) {
		$wp_filter[ $hook_name ] = new WP_Hook();
	}

	$wp_filter[ $hook_name ]->add_filter( $hook_name, $callback, $priority, $accepted_args );

	return true;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *