it-swarm-es.com

¿Es este un ejemplo de uso correcto de current_filter ()?

¿Es este un buen ejemplo 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;
  }
}

Entonces, ¿supongo que current_filter() se usa para obtener el nombre del filtro para el cual se está ejecutando la ejecución actual?

3
rsman

Hola @ Raj Sekharan :

A mí me parece bien, pero ¿querer saber el uso actual es realmente tu pregunta o quieres entender de dónde current_filter() obtiene su información?

Si es lo último, esto es básicamente lo que sucede en todas las diferentes funciones de procesamiento de ganchos, por ejemplo. do_action(), apply_filters(), do_action_ref_array(), apply_filters_ref_array() ( enormemente simplificado, por supuesto )

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

Luego, todo lo que hace current_filter() es recuperar el último gancho "empujado" en la matriz global wp_current_filter, es decir:

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

En general, sí, este es un uso válido. Si fuera usted, pasaría diferentes funciones a los diferentes filtros y abstraería las partes comunes en otras funciones.

De esta manera, cualquiera de sus funciones hará exactamente una cosa.

0
Nikolay