Задать вопрос

Что такое apply_filter в хуках и как используется?

Здравствуйте! Прошу объяснить по данному вопросу!
  • Вопрос задан
  • 2120 просмотров
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Apply_filters не в хуках, это и есть хук :)

Если не вдаваться в разъяснения в виде кода (это уже хорошо сделал WP_Panda), то человеческими словами это работает так:

1. В каком-то месте у вас есть значение. Вы его определили или получили откуда-то. Но вы хотите дать возможность другим разработчикам менять это значение, при этом не меняя ваш код. В примере панды это имя Vasya.

2. Чтобы дать возможность другим изменить ваше значение, вы оборачиваете его в функцию apply_filters, даете этому фильтру какое-то название (в примере панды - change_vasya_name), и передаете в эту функцию саму переменную, которая содержит ваше значение (Vasya).

3. Другой разработчик пишет свою функцию, которая подключается к этому фильтру по его имени - add_filter( 'change_vasya_name', $text ) - и эта функция на лету примет на входе то значение, которое определили вы (Vasya), может его заменить/изменить (например, на Petya) и вернуть обратно.

4. WordPress когда читает код всех файлов собирает все фильтры в одну стопочку, и их коллбеки (см. п. 3) раскладывает тоже по стопочкам, каждому фильтру свои коллбеки. На одном фильтре может быть много коллбеков (функций). Далее он сортирует их по приоритетам и выполняет по очереди. Таким образом, вместо того, чтобы просто взять ваше значение (Vasya) и использовать дальше его, WP посмотрит, есть ли на этом фильтре функции, если да - выполнит их и вместо Vasya уже будет использовать то значение, которое вернет последний фильтр (в нашем случае он один и возвращает Petya).
Ответ написан
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
function vasya() {
	    $text = 'Vasya';
	    echo apply_filters( 'change_vasya_name', $text );
    }

function petya( $text ) {
		return 'Petya';
	}

	add_filter( 'change_vasya_name', 'petya' );

	vasya();
#vasya напечатает Petya


Так доступно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы