Это хороший пример использования current_filter()
?
<?php
add_filter("_my_filter", "common_function");
add_filter("_another_filter", "common_function");
function common_function(){
$currentFilter = current_filter();
switch ($currentFilter) {
case '_my_filter':
echo "Called by My Filter";
break;
case '_another_filter':
echo "Called by another filter";
break;
}
}
Итак, я предполагаю current_filter()
, что используется для получения имени фильтра, для которого происходит текущее выполнение?
Привет @Raj Sekharan :
Выглядит хорошо для меня, но желание узнать текущее использование действительно является вашим вопросом или вы хотите понять, откуда
current_filter()
берется информация?Если второе, то вот что происходит во всех различных функциях обработки хуков, например
do_action()
,apply_filters()
,do_action_ref_array()
,apply_filters_ref_array()
( конечно, сильно упрощено ):Затем все, что
current_filter()
нужно сделать, это получить последний хук, «вставленный» в глобальныйwp_current_filter
массив, то есть:Я прочитал источник и понял, что толкает и выталкивает часть. Мне было интересно, зачем нам эта функция. Должен быть хороший вариант использования. Я подумал, что это может помочь определить, какой хук обрабатывается, когда одна и та же функция фильтра подключается к обоим.
Привет @Raj Sekharan. В таком случае вы уже ответили на свой вопрос. Есть некоторые хуки, где проще выполнить маршрутизацию к общей функции, но иногда вам нужно сделать что-то немного по-другому в зависимости от хука. Вот пример маршрутизации многих хуков к одной функции ( stackoverflow.com/questions/3472334/#3474234 ), и если бы нужно было знать, какие хуки их, функция current_filter() была бы действительно полезной. Кстати, я не знал, что он существует, пока не прочитал ваш вопрос, но сразу понял, как он может быть полезен в особых случаях.
Примечание:
$wp_current_filter
не работает для хука «все», поэтому вам нужно добавить свою собственную логику, чтобы узнать, была ли ваша функция хука запущена «всем» или другим (конкретным) хуком.$wp_current_filter
всегда будет содержать конкретное имя хука, а не «все».@hakre: Это правильно. Использование OTOH
all
действительно должно быть ограничено отладкой, поскольку оно срабатывает (практически?) для каждого хука.Привет @Nikolay — Рад тебя видеть здесь. Приятно познакомиться в Саванне!
Не могли бы вы объяснить, почему использование одной и той же функции для нескольких хуков нежелательно?
В целом — да, это правильное использование. На вашем месте я бы передал разные функции разным фильтрам и абстрагировал общие части в других функциях.
Таким образом, любая из ваших функций будет делать ровно одну вещь.