web-development-kb-pt.site

Este é um exemplo correto de uso de current_filter ()?

Este é um bom exemplo de uso de 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;
  }
}

Então eu estou supondo que current_filter() é usado para obter o nome do filtro para o qual a execução atual está acontecendo?

3
rsman

Oi @ Raj Sekharan :

Parece bom para mim, mas está querendo saber o uso atual realmente sua pergunta ou você quer entender de onde current_filter() obtém sua informação?

Se este último, aqui é basicamente o que acontece em todas as diferentes funções de processamento de gancho, e. do_action(), apply_filters(), do_action_ref_array(), apply_filters_ref_array() ( muito simplificado, claro ):

<?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;
}

Então tudo o que current_filter() faz é recuperar o último gancho "empurrado" para o array global wp_current_filter, por exemplo:

<?php
function current_filter() {
  global $wp_current_filter;
  return end( $wp_current_filter );
}
5
MikeSchinkel

Em geral, sim, esse é um uso válido. Se eu fosse você, passaria diferentes funções para os diferentes filtros e abstrairia as partes comuns em outra (s) função (ões).

Desta forma, qualquer uma das suas funções fará exatamente uma coisa.

0
Nikolay