Является Ли Это Правильным Примером Использования текущего фильтра()?
Является ли это хорошим примером использования 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()
используется для получения имени фильтра, для которого выполняется текущее выполнение?
2 answers
Привет@Радж Сехаран:
Выглядит хорошо для меня, но действительно ли вы хотите знать текущее использование или вы хотите понять, откуда current_filter()
получает эту информацию?
Если последнее, то вот в основном то, что происходит во всех различных функциях обработки крючков, например do_action()
, apply_filters()
, do_action_ref_array()
, apply_filters_ref_array()
( значительно упрощенный, конечно):
<?php
function <process_hook>($hook, $value) {
global $wp_filter, $wp_current_filter;
$wp_current_filter[] = $hook; // "Push" the hook onto the stack.
$value = call_user_func($wp_filter[$hook]['function'],$value);
array_pop($wp_current_filter);
return $value;
}
Затем все, что current_filter()
делает, это извлекает последний крючок , "нажатый" на глобальный массив wp_current_filter
, т.е.:
<?php
function current_filter() {
global $wp_current_filter;
return end( $wp_current_filter );
}
В целом - да, это допустимое использование. На вашем месте я бы передал разные функции разным фильтрам и абстрагировал общие части в других функциях.
Таким образом, любая из ваших функций будет выполнять ровно одну вещь.