rsman
  • 0
Учитель

Это правильный пример использования current_filter()?

  • 0

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

Share
  1. Привет @Raj Sekharan :

    Выглядит хорошо для меня, но желание узнать текущее использование действительно является вашим вопросом или вы хотите понять, откуда 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 );
    }
    
    • 0
    • Я прочитал источник и понял, что толкает и выталкивает часть. Мне было интересно, зачем нам эта функция. Должен быть хороший вариант использования. Я подумал, что это может помочь определить, какой хук обрабатывается, когда одна и та же функция фильтра подключается к обоим.

      • 0
    • Привет @Raj Sekharan. В таком случае вы уже ответили на свой вопрос. Есть некоторые хуки, где проще выполнить маршрутизацию к общей функции, но иногда вам нужно сделать что-то немного по-другому в зависимости от хука. Вот пример маршрутизации многих хуков к одной функции ( stackoverflow.com/questions/3472334/#3474234 ), и если бы нужно было знать, какие хуки их, функция current_filter() была бы действительно полезной. Кстати, я не знал, что он существует, пока не прочитал ваш вопрос, но сразу понял, как он может быть полезен в особых случаях.

      • 0
    • Примечание: $wp_current_filter не работает для хука «все», поэтому вам нужно добавить свою собственную логику, чтобы узнать, была ли ваша функция хука запущена «всем» или другим (конкретным) хуком. $wp_current_filter всегда будет содержать конкретное имя хука, а не «все».

      • 0
    • @hakre: Это правильно. Использование OTOH all действительно должно быть ограничено отладкой, поскольку оно срабатывает (практически?) для каждого хука.

      • 0
    • Привет @Nikolay — Рад тебя видеть здесь. Приятно познакомиться в Саванне!

      • 0
    • Не могли бы вы объяснить, почему использование одной и той же функции для нескольких хуков нежелательно?

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

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

    • 0

Оставить ответ

You must login to add an answer.