Как работают фильтры в WordPress

  • 13 сентября, 13:41
  • 5450
  • 0

Многим WordPress-разработчикам идея фильтров и действий не ясна. В этой статье мы поделимся с вами тем, что узнали о фильтрах WordPress.

Почему вы хотите использовать add_filter и apply_filters

Если вы хотите изменить существующий фрагмент данных, вы будете использовать add_filter, чтобы добавить функцию для изменения этого фрагмента данных

Вы используете apply_filters, чтобы запустить все функции, которые были добавлены с помощью add_filter, и вернуть данные после изменения всеми функциями, описанными выше.

Быстрый пример

Кусок кода стоит тысячи строк текста, так что вот небольшой пример:

$my_name = 'Luis';
add_filter('my_name', 'uppercase_it');
function uppercase_it($name)
{
    return strtoupper($name);
}
$new_name = apply_filters('my_name', $my_name);
dump($new_name);

Как вы можете догадаться, $ new_name - это «LUIS», и это то, что мы видим на экране (я использую здесь библиотеку var_dumper).

Как работают фильтры в WordPress

Небольшая заметка

Как видно из приведенного выше примера, add_filter принимает два параметра. Первый - это тег, а второй - функция. Добавление функции к тегу фильтра бесполезно, если вы не вызываете apply_filters с таким же тегом где-либо.

Когда apply_filters запускается для определенного тега, он вызывает все функции, добавленные в этот тег.

Несколько add_filter

Вы можете добавить в тег столько функций, сколько захотите. Давайте добавим еще одну функцию к my_name

$my_name = 'Luis';
add_filter('my_name', 'uppercase_it');
add_filter('my_name', 'add_family_name');
function uppercase_it($name)
{
    return strtoupper($name);
}
function add_family_name($name)
{
    return $name . ' Hernandez';

$new_name = apply_filters('my_name', $my_name);
dump($new_name);

Как видите, мы добавили еще одну функцию в тег my_name. Эта функция добавляет «Эрнандес» после имени. $ new_name сейчас будет:

Как работают фильтры в WordPress

Как видите, порядок add_filter имеет значение. 

Несколько apply_filters

Подобно add_filter, вы можете вызывать apply_filters столько раз, сколько захотите. Давайте посмотрим на код ниже:

<?php
$my_name = 'Luis';
add_filter('my_name', 'add_family_name');
add_filter('my_name', 'uppercase_it');
function uppercase_it($name)
{
    return strtoupper($name);
}
function add_family_name($name)
{
    return $name . ' Hernandez';
}
$new_name = apply_filters('my_name', $my_name);
$new_name2 = apply_filters('my_name', $my_name);

dump($new_name);
dump($new_name2);

Вы можете догадаться, что мы получили два одинаковых результата:

Как работают фильтры в WordPress

Теперь место, куда вы положили apply_filters, имеет значение. Если добавить один apply_filters после первого add_filter (но перед вторым add_filter), а другие apply_filters ниже всех, два результата будут разными:

$my_name = 'Luis';
add_filter('my_name', 'add_family_name');
$name_1 = apply_filters('my_name', $my_name);
add_filter('my_name', 'uppercase_it');
$name_2 = apply_filters('my_name', $my_name);
dump($name_1);
dump($name_2);

Как работают фильтры в WordPress

Однако порядок зависит от того, что называется приоритетом. 

А если покопаться в apply_filters

Теперь давайте заглянем внутрь apply_filters. Это довольно длинная функция, поэтому я бы посоветовал вам просмотреть полный исходный код здесь .

Давайте посмотрим на первую строку:

global $wp_filter, $wp_current_filter;

$ wp_filter - это массив, в котором хранятся все данные о тегах и их функциях. Давайте посмотрим на тег 'my_name', добавив следующий код ниже:

if ($tag == 'my_name')    {
    dump($wp_filter[$tag]);
}

Вот результат:

Как работают фильтры в WordPress

Как видите, $ wp_filter ['my_name'] является экземпляром WP_Hook. Давайте проигнорируем все остальные детали и сосредоточимся на свойстве обратного вызова.

Вы увидите, что это связанный массив с ключом (10) является приоритетом . Поскольку мы не указали приоритет при вызове add_filter, значение по умолчанию равно 10. WordPress использует приоритет для определения порядка вызова функций.

Если указать приоритет как ниже:

add_filter('my_name', 'add_family_name', 12);
add_filter('my_name', 'uppercase_it', 13);

Тогда массив обратных вызовов будет иметь два ключа, 12 и 13:

Как работают фильтры в WordPress

Надеемся, что примеры в этом посте помогли вам немного лучше понять фильтры в WordPress. 


0 комментариев
Сортировка:
Добавить комментарий

IT Новости

Смотреть все