Является Ли Это Правильным Примером Использования текущего фильтра()?


Является ли это хорошим примером использования 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() используется для получения имени фильтра, для которого выполняется текущее выполнение?

Author: Krzysiek Dróżdż, 2010-09-01

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 );
}
 5
Author: MikeSchinkel, 2010-09-01 06:29:53

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

Таким образом, любая из ваших функций будет выполнять ровно одну вещь.

 0
Author: Nikolay, 2010-09-01 07:13:50