do_action WordPress : guide complet pour comprendre et créer des hooks d’action
Sommaire de l'article
Introduction
Le fonctionnement de WordPress repose sur un système d’actions et de filtres appelés hooks. Parmi ces hooks, la fonction do_action est unélément clé : elle permet aux développeurs de déclencher des actions personnalisées à des moments précis du cycle de chargement de WordPress et d’exécuter toutes les fonctions qui y sont accrochées avec add_action. Cet article explore en profondeur le concept de do_action WordPress, ses applications pratiques et les bonnes pratiques à adopter pour optimiser son utilisation.
Avant de plonger dans les détails techniques, il est essentiel de comprendre que do_action est un outil puissant mais sensible. Une utilisation incorrecte peut affecter les performances de votre site ou même provoquer des comportements inattendus. C’est pourquoi nous allons aborder à la fois les principes théoriques, des exemples concrets et des conseils pratiques pour une intégration propre, sécurisée et maintenable.
Concepts clés : hooks, actions et filtres dans WordPress
Qu’est-ce qu’un hook WordPress ?
Un hook est un point d’entrée dans le code de WordPress où vous pouvez exécuter votre propre logique sans modifier le noyau (core) du CMS. Les hooks permettent donc d’étendre ou modifier le comportement de WordPress de manière propre, via un thème ou un plugin.
Il existe deux grandes catégories de hooks :
- Les actions (actions) : elles permettent d’exécuter du code à un moment précis du cycle WordPress (par exemple lors de l’affichage du header, au moment de l’enregistrement d’un article, après la connexion d’un utilisateur, etc.). Elles ne sont pas destinées à renvoyer une valeur.
- Les filtres (filters) : ils permettent de modifier des données avant qu’elles ne soient utilisées ou stockées (par exemple modifier le titre d’un article, le contenu affiché, une URL, un e‑mail envoyé, etc.). Un filtre reçoit une valeur en entrée et doit retourner une valeur en sortie.
Les hooks sont déclarés dans le code de WordPress, des thèmes ou des plugins, puis d’autres fonctions peuvent s’y accrocher via add_action ou add_filter. Ce mécanisme rend WordPress hautement extensible sans toucher au core.
Qu’est-ce que do_action en WordPress ?
Contrairement à ce que laisse parfois entendre un vocabulaire imprécis, do_action n’est pas « un type de hook » mais une fonction du core qui permet de déclencher un hook d’action. Quand vous appelez do_action( 'mon_hook', ... ), vous demandez à WordPress d’exécuter toutes les fonctions qui ontété enregistrées sur ce hook via add_action( 'mon_hook', 'ma_fonction' ).
On peut donc résumer ainsi :
- Le hook d’action est l’événement lui‑même (par exemple
'init','wp_head','save_post'ou un nom personnalisé). - do_action est l’appel de déclenchement qui active cetévénement et exécute toutes les fonctions accrochées.
- add_action sert à accrocher une fonction à un hook existant, qu’il soit natif ou personnalisé.
Autrement dit, vous utilisez do_action pour créer et déclencher vos propres hooks d’action, et les autres développeurs (ou vous‑même dans un autre fichier) peuvent alors s’y connecter avec add_action.
Comment fonctionne do_action en pratique ?
Signature et principe de do_action
La forme générale de la fonction dans WordPress est :
do_action( string $hook_name, mixed $arg1, mixed $arg2, ... );
Elle fonctionne selon troiséléments principaux :
- Nom du hook (
$hook_name) : une chaîne de caractères unique, par exemple'mon_action_personnalisee'. C’est ce nom qui sera utilisé aussi dansadd_action. - Arguments optionnels (
$arg1, $arg2, ...) : vous pouvez passer autant de paramètres que nécessaire. Ils seront transmis aux fonctions accrochées au hook. - Déclenchement : lorsque
do_actionest appelé, WordPress exécute dans l’ordre défini par la priorité toutes les fonctions qui ontété ajoutées avecadd_action( $hook_name, ... ). Par défaut, la priorité est de 10 et le nombre d’arguments acceptés est de 1, mais ces valeurs sont configurables.
Exemple de do_action et add_action
Voici un exemple simple pour illustrer le fonctionnement :
Dans votre fichier functions.php de thème ou dans un plugin personnalisé :
Puis ailleurs dans votre code (toujours dans un thème ou un plugin chargé par WordPress) :
Au moment où WordPress exécute do_action( 'mon_action_personnalisee' );, la fonction ma_fonction_personnalisee est appelée et le texte « Action personnalisée exécutée ! » est affiché.
Passer des arguments à do_action
Vous pouvez transmettre des données aux fonctions accrochées à votre hook d’action en ajoutant des paramètres à do_action. Par exemple :
Pour que les fonctions accrochées reçoivent ces valeurs, vous devez les déclarer avec des paramètres correspondants et préciser le nombre d’arguments acceptés dans add_action :
Dans cet exemple :
- La priorité de la fonction
notifier_inscriptionest 10 (valeur par défaut). - Le nombre d’arguments acceptés (
$accepted_args) est 3, ce qui permet de récupérer les trois paramètres passés àdo_action.
do_action_ref_array : variante avec tableau d’arguments
WordPress fournitégalement une variante appelée do_action_ref_array. Elle fonctionne comme do_action mais prend un tableau d’arguments au lieu d’une liste d’arguments séparés :
Les fonctions accrochées à 'mon_action_avec_tableau' doivent alorsêtre définies avec des paramètres correspondant à l’ordre deséléments du tableau, et add_action doit spécifier le nombre d’arguments attendus. Cette approche est particulièrement pratique lorsque vous avez déj à vos données dans un tableau ou lorsque vous souhaitez passer un grand nombre d’arguments.
did_action : savoir si un hook a déj àété exécuté
La fonction did_action( 'nom_du_hook' ) retourne le nombre de fois où une action spécifique aété exécutée durant le cycle de chargement de WordPress. Cela permet, par exemple, de vérifier si un hook a déj àété déclenché et d’éviter des appels redondants :
0 ) { // Le hook 'init' a déj àété exécuté
}
?>
Cycle de chargement WordPress et points d’entrée pour do_action
Les grandesétapes du cycle de WordPress
Pour utiliser efficacement do_action et les hooks d’action en général, il est crucial de comprendre les grandesétapes du cycle de chargement de WordPress. De manière simplifiée, on peut distinguer :
- Chargement du noyau : WordPress charge ses fichiers principaux et initialise le cœur du système.
- Chargement des plugins : les plugins actifs sont inclus et initialisés.
- Chargement du thème : les fichiers du thème actif (etéventuellement du thème parent) sont inclus.
- Initialisation : WordPress prépare l’environnement, les règles de réécriture, les types de contenus, les taxonomies, etc.
- Traitement de la requête : WordPress analyse l’URL, détermine le type de contenu à afficher (article, page, archive…) et prépare la boucle.
- Génération et affichage de la page : le thème affiche le HTML final (header, contenu, sidebar, footer…).
- Nettoyage et fin de cycle : actions finales, fermeture de la requête, envoi de la réponse complète au navigateur.
Exemples d’actions natives importantes
À chacune de cesétapes, WordPress déclenche de nombreuses actions via do_action. Parmi les plus utilisées, on peut citer :
init: déclenchée après le chargement du noyau et des fichiers principaux, c’est un hook central pour enregistrer des types de contenus personnalisés, des taxonomies, des règles de réécriture, etc.wp_head: appelée dans le fichierheader.phpdu thème, juste avant la balise. Elle permet, par exemple, d’ajouter des balises, des scripts ou des feuilles de style.wp_footer: appelée dans le fichierfooter.php, juste avant la balise