Qu’est-ce qu’un hook WordPress ?
Un hook WordPress est un point d’ancrage dans le code du CMS qui permet d’exécuter des fonctions personnalisées à des moments précis du cycle de vie d’une page ou d’une requête. C’est le mécanisme fondamental qui rend WordPress extensible sans jamais avoir à modifier les fichiers du core — une règle d’or que tout développeur sérieux applique sans exception. Il existe deux types de hooks : les actions et les filtres. Comprendre la différence entre les deux, c’est comprendre comment WordPress respire.
Les actions : exécuter du code à un moment précis
Une action est un hook qui permet d’exécuter une fonction à un point précis du cycle d’exécution, sans retourner de valeur. On s’y accroche avec add_action() et on déclenche ses propres points d’ancrage avec do_action(). Exemple classique : ajouter des scripts dans le head du site.
add_action( 'wp_enqueue_scripts', 'mon_theme_scripts' );
function mon_theme_scripts() {
wp_enqueue_script( 'mon-script', get_template_directory_uri() . '/js/script.js', array(), '1.0', true );
}
Le troisième paramètre de add_action() est la priorité — un entier qui détermine l’ordre d’exécution des fonctions accrochées au même hook. Par défaut à 10, une priorité plus basse s’exécute avant, une priorité plus haute après. Le quatrième paramètre indique le nombre d’arguments acceptés par la fonction callback.
Les hooks d’action les plus utilisés
init — s’exécute après le chargement de WordPress, idéal pour enregistrer des custom post types ou des taxonomies. wp_head et wp_footer — pour injecter du contenu dans le head ou le footer. save_post — déclenché lors de l’enregistrement d’un article, parfait pour des traitements post-sauvegarde. wp_login et wp_logout — pour des actions liées à l’authentification. template_redirect — pour intervenir avant le chargement du template.
Les filtres : modifier une valeur avant qu’elle soit utilisée
Un filtre est un hook qui reçoit une valeur, permet de la modifier, et la retourne. C’est la distinction fondamentale avec les actions : un filtre doit obligatoirement retourner une valeur. On s’y accroche avec add_filter() et on crée ses propres points de filtre avec apply_filters().
add_filter( 'the_content', 'mon_filtre_contenu' );
function mon_filtre_contenu( $content ) {
$content .= '<p>Merci de votre lecture.</p>';
return $content;
}
L’erreur la plus fréquente des développeurs débutants : oublier le return dans une fonction de filtre. Résultat : la valeur disparaît silencieusement et le debug devient laborieux. Un filtre sans return, c’est comme un plombier qui repart avec les tuyaux.
Les hooks de filtre les plus utilisés
the_content — pour modifier le contenu des articles avant affichage. the_title — pour intervenir sur les titres. wp_title et document_title_parts — pour personnaliser les balises title. login_redirect — pour rediriger après connexion. upload_mimes — pour autoriser des types de fichiers supplémentaires à l’upload. pre_get_posts — pour modifier les requêtes WP_Query avant exécution, l’un des filtres les plus puissants de l’écosystème.
Créer ses propres hooks : rendre son code extensible
Un développeur WordPress qui ne crée pas ses propres hooks dans ses plugins et thèmes passe à côté d’une dimension essentielle du métier. do_action() et apply_filters() permettent de créer des points d’extension que d’autres développeurs — ou vous-même dans six mois — pourront utiliser sans modifier le code source.
// Dans votre plugin
$prix_final = apply_filters( 'mon_plugin_prix', $prix_base, $produit_id );
Cette ligne rend le calcul du prix interceptable et modifiable par n’importe quel code tiers, sans toucher au plugin. C’est la philosophie même de WordPress : concevoir pour l’extensibilité dès le départ.
Supprimer un hook : remove_action et remove_filter
Aussi important qu’ajouter des hooks, savoir les supprimer est une compétence clé. remove_action() et remove_filter() permettent de détacher une fonction d’un hook — à condition de respecter la même priorité que lors de l’accrochage initial. Un détail qui provoque des heures de debug quand on l’oublie.
remove_action( 'wp_head', 'wp_generator' ); // Supprime la version WordPress du head
Pour supprimer une méthode d’une classe instanciée par WordPress, la syntaxe est légèrement différente et nécessite d’intervenir après l’instanciation de l’objet — généralement via un hook d’action avec une priorité suffisamment haute.
Bonnes pratiques et erreurs à éviter
Toujours préfixer ses fonctions pour éviter les conflits de noms — une évidence souvent négligée. Ne jamais modifier les fichiers du core WordPress ou d’un thème/plugin tiers directement — toujours passer par un hook. Utiliser un plugin enfant ou un plugin de fonctionnalités dédié pour ses hooks personnalisés plutôt que le functions.php du thème, qui disparaît à chaque mise à jour de thème. Enfin, documenter ses hooks avec des commentaires clairs : un hook sans documentation est un piège pour le prochain développeur — qui sera peut-être vous dans quelques mois.


