Recherche…


Syntaxe

  • add_action ($ tag, $ function_to_add)
  • add_action ($ tag, $ function_to_add, $ priority)
  • add_action ($ tag, $ function_to_add, $ priority, $ accepted_args)

Paramètres

Paramètre Détails
$ tag (string) (Obligatoire) Nom de l'action à laquelle est attaché $function_to_add
$ function_to_add ( callable ) (Obligatoire) Fonction qui doit être appelée lorsque l'action indiquée par la $tag est exécutée
$ priorité (int) (Facultatif) Valeur par défaut: 10 Utilisé pour spécifier l'ordre dans lequel les fonctions associées à une action particulière sont exécutées. Les nombres inférieurs correspondent à une exécution antérieure et les fonctions ayant la même priorité sont exécutées dans l'ordre dans lequel elles ont été ajoutées à l'action.
$ accepted_args (int) (Facultatif) Valeur par défaut: 1 Nombre d'arguments acceptés par la fonction.

Remarques

La fonction add_action() crée un crochet d'action , associant une fonction PHP à une action particulière "tag" ou à un nom. Lorsque l'action est "déclenchée" par un appel à do_action() (ou do_action_ref_array() ) avec une balise spécifique, toutes les fonctions "accrochées" à cette balise seront exécutées.

Dans la plupart des cas, cette fonction doit être utilisée dans le fichier functions.php un thème ou dans un fichier de plugin - ou dans un autre fichier source chargé par l'un ou l'autre.

Cette fonction fait partie de l' API du plugin

Crochet d'action de base

L'application la plus simple de add_action() consiste à ajouter du code personnalisé à exécuter à un certain emplacement dans le code source d'une installation WordPress - soit en utilisant des actions fournies par le Core de WordPress, soit par des codes tiers tels que des plugins et thèmes.

Pour ajouter du contenu à la section <head></head> du site - dites à un élément <link> meta add pour indiquer où les informations de copyright du site peuvent être trouvées - add_action() peut être utilisé pour attacher une fonction qui imprime le balisage approprié à l'action 'wp_head' (qui déclenche lorsque WordPress construit la section <head> ):

function add_copyright_meta_link() {
  echo( '<link rel="copyright" href="' . get_home_url() . '/copyright">' );
}

add_action( 'wp_head', 'add_copyright_meta_link' );

Priorité du crochet d'action

Un nombre quelconque de fonctions peut être "accroché" à une action donnée. Dans certains cas, il est important qu'une fonction accrochée s'exécute avant ou après les autres, ce qui correspond au troisième paramètre de add_action() , $priority .

Si l'argument $priority est omis, la fonction sera associée à la priorité par défaut de 10 . Lorsque l'action est "déclenchée", les fonctions "accrochées" seront appelées en commençant par celles ajoutées avec la plus petite $priority et progressant vers les fonctions avec la plus grande $priority . Toutes les fonctions accrochées partageant la même priorité seront appelées dans l'ordre où elles ont été ajoutées (l'ordre dans lequel leurs appels add_action() respectifs ont été exécutés).

Par exemple, disons qu'un plug-in tiers utilise une fonction liée à l'action 'template_redirect' afin de transférer les visiteurs vers la page daily-deal vers un lien d'affiliation pour un site de commerce électronique externe, mais que vous souhaitez la redirection se produire uniquement pour les utilisateurs connectés. Vous devez utiliser votre propre hook 'template_redirect' pour envoyer des visiteurs déconnectés à la page de connexion. Après avoir déterminé que le plug-in tiers joint sa fonction avec la valeur par défaut de $piority 10 , vous pouvez $piority votre fonction avec une priorité de 9 pour vous assurer que votre vérification de connexion se produit en premier:

function redirect_deal_visitors_to_login() {
  if( is_page( 'daily-deal' ) && !user_is_logged_in() ) {
    wp_redirect( wp_login_url() );
    exit();
  }
}

add_action( 'template_redirect', 'redirect_deal_visitors_to_login', 9 );

Accrocher les méthodes de classe et d’objet aux actions

Les classes PHP sont un outil puissant pour améliorer l'organisation du code et minimiser les collisions de noms. À un moment ou à un autre, la question de savoir comment créer un crochet d'action pour une méthode de classe se pose inévitablement.

L'argument $function_to_add est souvent affiché sous la forme d'une chaîne contenant le nom de la fonction, mais le type de données de l'argument est en réalité un " appelable ", qui peut être résumé comme "une référence à une fonction ou à une méthode".

Il existe un certain nombre de formats appelables pouvant être utilisés pour référencer des méthodes sur des classes et des objets. Dans tous les cas cependant, la méthode référencée doit être visible publiquement. Une méthode est publique lorsqu'elle est préfixée par le mot-clé public ou pas du tout par un mot-clé de visibilité (auquel cas la méthode est par défaut publique).

Méthode d'objet Crochets d'action

Les méthodes d'objet sont exécutées sur une instance particulière d'une classe.

class My_Class {
  // Constructor
  function My_Class() {
    // (Instantiation logic)
  }

  // Initialization function
  public function initialize() {
    // (Initialization logic)
  }
}

Après avoir instancié la classe ci-dessus comme suit,

$my_class_instance = new My_Class();

la méthode initialize() serait normalement appelée sur l'objet en appelant $my_class_instance->initialize(); . Accrocher la méthode à l'action WordPress 'init' se fait en passant un tableau contenant une référence à l'instance et une chaîne contenant le nom de la méthode d'objet:

add_action( 'init', [ $my_class_instance, 'initialize' ] );

Si add_action() est appelée dans une méthode objet, la variable $this peut aussi être utilisée:

class My_Class {
  // Constructor
  function My_Class() {
    // (Instantiation logic)
    add_action( 'init', [ $this, 'initialize' ] );
  }

  // Initialization function
  public function initialize() {
    // (Initialization logic)
  }
}

Méthodes de classe

Les méthodes de classe sont exécutées de manière statique sur une classe plutôt que sur une instance particulière. Compte tenu de la classe suivante,

class My_Class {   
  // Initialization function
  public static function initialize() {
    // (Initialization logic)
  }
}

la méthode initialize() serait normalement appelée à l'aide de l'opérateur :: scope-resolution, c'est-à-dire My_Class::initialize(); . Accrocher une méthode de classe statique à un WordPress peut se faire de deux manières différentes:

  • En utilisant un tableau composé d'une chaîne contenant le nom de la classe et une chaîne contenant le nom de la méthode:

    add_action( 'init', [ 'My_Class', 'initialize' ] );
    
  • Passer une chaîne contenant une référence complète à la méthode, y compris l'opérateur ::

    add_action( 'init', 'My_Class::initialize' );
    
  • Si add_action() est appelée dans une méthode de classe statique, le mot-clé self ou la constante-constante __CLASS__ peut être utilisé à la place du nom de la classe. Notez que cela est généralement déconseillé car les valeurs de ces éléments deviennent quelque peu contre-intuitives dans le cas d'un héritage de classe.

    class My_Class {
      // Setup function
      public static function setup_actions() {
        add_action( 'init', 'self::initialize' );
      }
    
      // Initialization function
      public static function initialize() {
        // (Initialization logic)
      }
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow