web-dev-qa-db-fra.com

Est-ce un exemple correct d'utilisation de current_filter ()?

Est-ce un bon exemple d'utilisation 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;
  }
}

Donc, je suppose que current_filter() est utilisé pour obtenir le nom du filtre pour lequel l'exécution en cours est en cours?

3
rsman

Bonjour @ Raj Sekharan :

Cela me semble bien, mais vouloir connaître l’usage actuel est-il vraiment votre question ou voulez-vous comprendre où current_filter() obtient ses informations?

Dans ce dernier cas, voici en gros ce qui se passe dans les différentes fonctions de traitement des hooks, par exemple: do_action(), apply_filters(), do_action_ref_array(), apply_filters_ref_array() ( grandement simplifié, bien sûr ):

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

Ensuite, tout ce que current_filter() fait est de récupérer le dernier hook "poussé" sur le tableau global wp_current_filter, c'est-à-dire:

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

En général, oui, c'est un usage valide. Si j'étais vous, je transmettrais différentes fonctions aux différents filtres et résumerais les parties communes des autres fonctions.

De cette façon, n'importe lequel de vos fonctions fera exactement une chose.

0
Nikolay