WordPress s’est imposé comme une référence incontournable dans le monde du web. Aujourd’hui, il propulse plus de 40 % des sites Internet à travers le globe, tous types confondus. Sa popularité repose non seulement sur sa facilité d’utilisation, qui séduit les débutants, mais aussi sur la profondeur de sa structure, capable de répondre aux exigences des développeurs avancés. Si vous vous lancez dans la création d’un site Internet professionnel, WordPress représente une base solide, libre et évolutive. Parmi ses nombreuses forces : l’architecture modulaire qui permet de l’étendre sans jamais modifier le cœur du CMS. Cette extensibilité repose en grande partie sur le système de hooks.
- Introduction aux hooks : actions et filtres
- Préparer son environnement de développement WordPress
- Les fichiers concernés pour débuter avec les actions
- La philosophie des actions dans WordPress
- Comment utiliser les actions pour mieux coder dans WordPress
- Utiliser des arguments dans une action
- Utiliser des arguments dans une action
- Aller plus loin dans le développement sous WordPress avec les actions
Introduction aux hooks : actions et filtres
Les hooks sont des points d’ancrage dans le cycle d’exécution de WordPress qui permettent d’intervenir sans toucher aux fichiers natifs. Il en existe deux types : les actions, qui permettent d’ajouter ou d’exécuter du code à des moments précis ; et les filtres, qui modifient des données avant leur affichage ou leur traitement. Dans ce guide, nous allons nous concentrer sur l’utilisation des actions, véritables leviers de personnalisation avancée.
Préparer son environnement de développement WordPress
Avant de commencer à manipuler les hooks, certaines bonnes pratiques sont à respecter. Première règle d’or : ne jamais modifier un thème parent. Toutes vos modifications doivent se faire à travers un thème enfant, qui vous garantit la pérennité de vos ajouts même après une mise à jour du thème principal. Cela vous assure aussi de pouvoir revenir facilement en arrière en cas de problème.
Ensuite, travaillez dans un environnement de test, que ce soit en local (via LocalWP, MAMP ou WampServer par exemple) ou sur un site de préproduction. L’utilisation des hooks demande une base minimale en PHP : inutile d’être un expert, mais une compréhension des fonctions, des variables et de la syntaxe est indispensable pour ne pas transformer votre site en terrain miné.
Les fichiers concernés pour débuter avec les actions
Dans ce tutoriel, nous allons interagir principalement avec deux fichiers :
- functions.php : c’est le cœur des personnalisations de votre thème enfant. Vous y déclarerez vos fonctions et vos hooks personnalisés.
- page.php : un template de page où vous pourrez observer le résultat de vos actions ou insérer vos propres déclencheurs personnalisés via
do_action()
.
Pour observer efficacement vos essais, créez une nouvelle page vierge depuis l’interface d’administration WordPress. Cela vous permettra de visualiser clairement les effets de vos scripts et de contrôler étape par étape ce qui est injecté dans le rendu.
Vous êtes maintenant prêt à découvrir le fonctionnement des actions dans WordPress et à apprendre à les manipuler pour enrichir votre site en toute sécurité.
La philosophie des actions dans WordPress
Le fonctionnement des actions dans WordPress repose sur une logique d’exécution ordonnée, comparable à celle des niveaux d’initialisation d’un système d’exploitation comme Linux. Dans ce dernier, chaque processus est déclenché à une étape bien définie du démarrage pour garantir la cohérence du système. WordPress applique une philosophie semblable lors du chargement de ses pages ou de son tableau de bord.
Chaque action dans WordPress correspond à un moment précis du cycle de vie d’une requête. Cela peut être avant l’affichage d’un en-tête, après l’enregistrement d’un article, ou même lors de la connexion d’un utilisateur. Ce système repose sur des points d’ancrage appelés hooks, qui permettent à un développeur d’« accrocher » ses fonctions personnalisées et d’exécuter son propre code à ces moments clés, sans avoir à modifier les fichiers natifs du CMS.
Ces hooks sont divisés en deux grandes familles : les actions, qui exécutent du code à un moment donné (ex. : envoyer un email après une commande), et les filtres, qui modifient des données (ex. : changer le titre d’un article avant affichage). Dans le cas des actions, WordPress définit une série de points dans son cycle d’exécution où vous pouvez injecter vos propres fonctionnalités.
Chaque action accepte un ou plusieurs paramètres. Vous pouvez également définir une priorité pour déterminer l’ordre d’exécution si plusieurs fonctions sont associées à un même hook. Par défaut, cette priorité est fixée à 10, mais vous pouvez utiliser un entier inférieur pour que votre fonction s’exécute plus tôt, ou un entier supérieur pour la retarder. Cette souplesse permet une hiérarchisation très fine de vos interventions.
Ce système d’action est d’autant plus puissant qu’il est évolutif. Non seulement vous pouvez utiliser les hooks existants fournis par WordPress, mais vous pouvez également créer vos propres hooks personnalisés grâce à la fonction do_action()
. C’est ce qui rend WordPress particulièrement attractif pour les développeurs : chaque étape de son fonctionnement peut être modulée, étendue ou contournée de manière propre et maintenable.
Comment utiliser les actions pour mieux coder dans WordPress
Nous voici dans la partie concrète et pratique : l’utilisation des actions WordPress dans le fichier functions.php
. Cette section va vous permettre de comprendre comment déclencher des fonctions personnalisées à des moments précis du cycle de vie de WordPress. L’exemple ici est volontairement simple pour se concentrer sur la logique plutôt que sur la complexité fonctionnelle. Si vous souhaitez aller plus loin, des bases solides en PHP sont évidemment recommandées.
Créer sa première action
Commençons par un exemple basique. Dans le fichier functions.php
de votre thème enfant, ajoutez ce code :
// ma première action
function dire_bonjour() {
echo '<p class="hello">Hello World !!</p>';
}
add_action('init', 'dire_bonjour');
Une fois votre code ajouté et la page d’accueil rechargée, vous devriez voir s’afficher « Hello World !! ». Si ce n’est pas visible, vérifiez la couleur du texte. Sur un fond sombre ou si l’affichage se fait dans une zone peu visible, vous pouvez ajouter ce petit CSS dans votre feuille de style pour forcer la visibilité :
.hello {
color: white;
margin-top: 50px;
}
La fonction add_action()
lie une fonction utilisateur (ici dire_bonjour
) à un hook WordPress spécifique (init
dans cet exemple). Le hook init
est déclenché après que WordPress a chargé tous les fichiers principaux mais avant d’envoyer la réponse au navigateur. C’est l’un des premiers moments où l’on peut commencer à exécuter du code personnalisé.
WordPress propose une grande quantité de hooks prédéfinis que vous pouvez consulter sur la page officielle de la documentation WordPress. Certains sont spécifiques à l’interface d’administration, d’autres sont utilisables sur le front-end. C’est cette richesse qui fait des hooks un levier extrêmement puissant pour tout développeur WordPress souhaitant créer des comportements personnalisés sans jamais modifier les fichiers natifs du CMS.
Utiliser l’ordre de déclenchement d’une action
Pour affiner la logique de votre code dans WordPress, il est essentiel de bien comprendre la hiérarchie d’exécution des actions. Cela vous permet de contrôler l’ordre dans lequel vos fonctions sont exécutées, un atout non négligeable lorsque plusieurs éléments interagissent sur une même page.
Une première méthode consiste à déclarer des fonctions avec des hooks différents, comme ici avec init
et wp
:
function dire_bonjour() {
echo '<p class="hello">Hello World !!</p>';
}
add_action('init', 'dire_bonjour');
function dire_aurevoir() {
echo '<p class="hello">See ya World !!</p>';
}
add_action('wp', 'dire_aurevoir');
Le hook init
est exécuté plus tôt que wp
. En conséquence, « Hello World !! » s’affiche avant « See ya World !! ». Cette hiérarchisation est définie par le cœur de WordPress et documentée dans le codex officiel.
Mais il est aussi possible de jouer avec l’ordre d’exécution *au sein d’un même hook*, grâce à un troisième paramètre dans add_action()
:
function dire_aurevoir() {
echo '<p class="hello">See ya World !!</p>';
}
add_action('wp', 'dire_aurevoir', 2);
function dire_bonjour() {
echo '<p class="hello">Hello World !!</p>';
}
add_action('wp', 'dire_bonjour', 1);
Bien que la fonction dire_aurevoir()
soit écrite avant dans le fichier, c’est dire_bonjour()
qui s’exécute en premier grâce à sa priorité plus élevée (chiffre le plus bas). À noter : deux fonctions peuvent partager la même priorité. Dans ce cas, l’ordre d’apparition dans le fichier détermine celle qui sera exécutée en premier :
function dire_aurevoir() {
echo '<p class="hello">See ya World !!</p>';
}
add_action('wp', 'dire_aurevoir');
function dire_bonjour() {
echo '<p class="hello">Hello World !!</p>';
}
add_action('wp', 'dire_bonjour');
Comme dire_aurevoir()
est déclarée en premier, elle s’exécute avant dire_bonjour()
, même avec une priorité égale.
Enfin, il est tout à fait possible d’utiliser plusieurs fois une même fonction avec des priorités différentes, en la liant plusieurs fois au même hook :
function dire_bonjour() {
echo '<p class="hello">Hello World !!</p>';
}
add_action('wp', 'dire_bonjour', 1);
add_action('wp', 'dire_bonjour', 2);
Ce type de duplication peut être utile pour forcer l’exécution de la même fonction dans plusieurs contextes spécifiques d’un hook. Cependant, attention à l’effet de redondance si cela n’est pas intentionnel.
Créer et personnaliser ses hooks et ses actions
Créer ses propres hooks dans WordPress offre une souplesse considérable pour structurer et moduler le comportement de son thème ou de ses extensions. Cette fonctionnalité permet de déclencher des fonctions à des moments précis, y compris à des endroits du code où aucun hook natif n’est prévu.
Commençons par insérer une action personnalisée dans page.php
, juste en dessous de l’appel au header :
do_action('bonjour_aurevoir');
get_header();
Ici, do_action('bonjour_aurevoir')
sert de déclencheur. On vient de créer un point d’ancrage pour une ou plusieurs fonctions, qui seront appelées au moment du rendu de cette page. L’intérêt réside dans la possibilité d’y rattacher dynamiquement plusieurs fonctions sans modifier le fichier lui-même par la suite.
Dans functions.php
, ajoutons deux fonctions et associons-les à ce hook :
function dire_bonjour(){
echo '<p class="hello">Page test : Hello World !!</p>';
}
add_action('bonjour_aurevoir', 'dire_bonjour', 1);
function dire_aurevoir(){
echo '<p class="hello">Page test : See ya World !!</p>';
}
add_action('bonjour_aurevoir', 'dire_aurevoir', 2);
Grâce à l’argument de priorité (ici 1 et 2), nous définissons l’ordre d’exécution de ces fonctions. dire_bonjour()
sera déclenchée avant dire_aurevoir()
. Ce mécanisme est essentiel pour des affichages séquentiels, des traitements logiques ou des injections de contenu dans un ordre maîtrisé.
Utiliser des arguments dans une action
Les hooks personnalisés peuvent également transporter des données. Cette capacité les rend très utiles pour passer des paramètres dynamiquement, par exemple des informations d’utilisateur ou des options de configuration.
Utiliser un argument unique dans un hook
Dans le fichier page.php
, si un utilisateur est connecté, on peut lui adresser un message personnalisé :
$current_user = wp_get_current_user();
do_action('bonjour', $current_user->display_name);
Puis, dans functions.php
, on capture ce nom pour l’afficher :
function bonjour_nom($nom) {
echo '<p class="hello">Hello ' . esc_html($nom) . ' !!</p>';
}
add_action('bonjour', 'bonjour_nom');
Ce type de transmission permet de créer des interfaces dynamiques et orientées utilisateur, sans avoir à manipuler manuellement des données globales.
Le hook ainsi enrichi devient un outil de dialogue entre différentes parties du site, et structure mieux vos scripts PHP selon une logique modulaire. Cela facilite aussi la maintenance et la lisibilité du code.
Créer et personnaliser ses hooks et ses actions
Les actions personnalisées constituent l’un des outils les plus puissants mis à la disposition des développeurs WordPress. Elles permettent de structurer le code selon des logiques métiers spécifiques, sans dépendre uniquement de l’ordre d’exécution imposé par le CMS. En créant vos propres hooks, vous gagnez en modularité et en lisibilité, tout en respectant les bonnes pratiques de développement.
Commençons par un exemple simple. Dans le fichier page.php
, juste après l’appel de get_header();
, insérez ce hook personnalisé :
do_action('bonjour_aurevoir');
get_header();
Ce hook nommé bonjour_aurevoir
ne déclenche encore rien par défaut. Il faut maintenant le connecter à une ou plusieurs fonctions dans le fichier functions.php
de votre thème enfant :
function dire_bonjour() {
echo '<p class="hello">Page test : Hello World !!</p>';
}
add_action('bonjour_aurevoir', 'dire_bonjour', 1);
function dire_aurevoir() {
echo '<p class="hello">Page test : See ya World !!</p>';
}
add_action('bonjour_aurevoir', 'dire_aurevoir', 2);
En affectant un ordre de priorité différent à chaque fonction (via le troisième argument de add_action()
), vous contrôlez précisément l’ordre d’exécution. Ici, dire_bonjour
sera exécutée avant dire_aurevoir
.
Utiliser des arguments dans une action
Un hook personnalisé peut aussi transporter des données. Cela permet de rendre votre système d’action plus dynamique et réutilisable dans d’autres contextes, notamment lorsqu’il s’agit d’afficher des informations personnalisées comme le nom d’un utilisateur connecté.
Utiliser un argument unique dans un hook
Dans votre page.php
, ajoutez ce code pour passer le nom de l’utilisateur connecté à votre hook :
$current_user = wp_get_current_user();
do_action('bonjour', $current_user->display_name);
Puis, dans votre functions.php
, liez une fonction qui récupère et affiche ce nom :
function bonjour_nom($nom) {
echo '<p class="hello">Hello ' . esc_html($nom) . ' !!</p>';
}
add_action('bonjour', 'bonjour_nom');
Ici, $current_user->display_name
est transmis en argument à bonjour_nom
. Grâce à ce système, vous affichez dynamiquement des données issues du contexte d’exécution sans alourdir votre logique métier.
Si vous actualisez la page en étant connecté à WordPress, vous verrez apparaître un message personnalisé contenant votre nom. Cela démontre toute la souplesse du système d’action de WordPress, que vous pouvez désormais exploiter pour injecter du contenu, déclencher des traitements ou interfacer des modules.
Et si vous souhaitez gérer plusieurs arguments, c’est tout à fait possible ! Faites-nous signe si vous voulez un exemple étendu avec plusieurs variables à transmettre dans un hook.
Plusieurs arguments dans un hook
Pour aller plus loin avec les hooks personnalisés dans WordPress, vous pouvez transmettre plusieurs arguments à une fonction associée à une action. Cela vous permet, par exemple, d’afficher plusieurs informations sur l’utilisateur connecté comme son nom et son adresse e-mail.
Dans le fichier page.php
, insérez ce code :
$current_user = wp_get_current_user();
do_action('bonjour', $current_user->display_name, $current_user->user_email);
get_header();
Ce hook bonjour
est ici déclenché avec deux arguments : le nom d’affichage de l’utilisateur et son adresse e-mail. Il vous reste à définir la fonction réceptrice dans functions.php
:
function bonjour_nom($nom, $mail) {
echo '<p class="hello">Bonjour ' . esc_html($nom) . ', votre adresse email est : ' . esc_html($mail) . '</p>';
}
add_action('bonjour', 'bonjour_nom', 10, 2);
Ici, add_action()
utilise un quatrième argument (2
) qui permet à WordPress de savoir que la fonction bonjour_nom()
attend deux arguments. Sans cette précision, seul le premier paramètre serait traité, et $mail
resterait vide.
Le troisième argument de add_action()
, ici laissé à la valeur par défaut 10
, définit la priorité d’exécution. Vous pouvez le modifier pour influencer l’ordre si plusieurs fonctions sont liées au même hook.
Ce système vous permet une grande flexibilité. Vous pouvez imaginer passer des arguments dynamiques en fonction du contexte utilisateur, des paramètres de requête ou d’autres données applicatives.
Attention : l’ordre de déclaration des arguments dans do_action()
et dans la fonction doit être strictement identique. Si vous inversez les arguments (par exemple email avant nom), l’affichage sera incohérent.
Ce mécanisme est particulièrement utile pour créer des systèmes modulaires dans des projets complexes : vous pouvez définir des points d’entrée uniques (actions), et injecter dans les fonctions associées toutes les informations utiles au contexte.
Aller plus loin dans le développement sous WordPress avec les actions
Au-delà de la création et de l’utilisation de hooks personnalisés, WordPress propose un ensemble de fonctions avancées permettant d’interagir avec son système d’actions de manière plus fine. Ces fonctions sont particulièrement utiles pour les développeurs qui souhaitent adapter le comportement du CMS à des cas d’usage spécifiques, contrôler l’ordre d’exécution ou désactiver certaines fonctionnalités par défaut.
did_action()
La fonction did_action()
retourne le nombre de fois qu’une action spécifique a été exécutée au cours du cycle de chargement de WordPress. Cela permet, par exemple, de vérifier si un hook a déjà été appelé avant d’en déclencher un nouveau, afin d’éviter des appels redondants.
if ( did_action('init') > 0 ) {
// Le hook 'init' a déjà été exécuté
}
C’est très utile lorsque vous avez besoin de conditionner certains comportements à l’état du cycle WordPress.
has_action()
has_action()
permet de savoir si une fonction est attachée à un hook donné. Elle renvoie la priorité à laquelle cette fonction est exécutée, ou false
si elle n’est pas attachée. Cette vérification est précieuse lorsqu’on développe des plugins ou thèmes destinés à interagir avec des extensions tierces.
if ( has_action( 'wp_footer', 'afficher_auteur' ) ) {
// La fonction afficher_auteur est bien liée au hook 'wp_footer'
}
Vous pouvez également utiliser cette fonction pour auditer les hooks actifs sur votre site ou pour prendre des décisions dynamiques en fonction de leur présence.
remove_action()
Grâce à remove_action()
, vous pouvez désactiver une fonction déjà liée à un hook, à condition de connaître les mêmes paramètres utilisés lors de son enregistrement initial : le nom de la fonction, la priorité et le hook. Cette fonction est idéale pour désactiver des comportements standards ou mal adaptés à votre contexte, comme une fonction d’un plugin que vous ne souhaitez pas utiliser.
remove_action( 'wp_footer', 'afficher_signature', 10 );
Si vous ne précisez pas correctement la priorité, la suppression échouera silencieusement. Il est donc recommandé d’utiliser has_action()
pour identifier la bonne valeur.
Bonnes pratiques complémentaires pour conclure
- Évitez de supprimer des actions système sans avoir vérifié leur impact (certains hooks sont utilisés en interne par WordPress) ;
- Documentez toujours vos suppressions et modifications de hooks, notamment lors de la personnalisation de thèmes enfants ou de plugins ;
- Utilisez ces fonctions dans un contexte conditionné (ex. : uniquement si une extension est active), afin de ne pas générer d’erreurs fatales en environnement de production.
En intégrant ces fonctions dans votre processus de développement, vous accédez à un niveau de contrôle avancé sur le fonctionnement de WordPress. C’est un passage obligé pour tout développeur souhaitant bâtir un site optimisé, flexible et pérenne.
Très bien expliqué, merci.