Retour au blog
Tutorielswordpress · hooks

Hooks WordPress 2026 : guide complet pour développeurs ?" actions, filters, création, bonnes pratiques

Guide complet des hooks WordPress 2026 : actions et filters, création de hooks personnalisés, bonnes pratiques, exemples concrets pour développeurs. Le système d'extension ultime.

L'équipe Volade1 avril 202612 min de lecture
0 vues0 commentaires0 avis0 partages
Partager sur
Hooks WordPress 2026 ?" Guide complet actions, filters, création

Les hooks sont le système nerveux de WordPress. Sans eux, il serait impossible d'étendre le CMS sans modifier le code source. Actions et filters sont ce qui fait de WordPress une plateforme extensible plutôt qu'un simple logiciel.

Pourtant, beaucoup de développeurs les utilisent sans vraiment comprendre leur mécanique : priorité, nombre de paramètres, hooks conditionnels, création de hooks personnalisés pour vos propres plugins et thèmes.

Ce guide est conçu pour les développeurs qui veulent passer de « j'utilise des hooks » à « je maîtrise le système de hooks ». On y couvre la théorie, la pratique, les pièges, et les patterns avancés ?" avec des exemples concrets issus de notre travail chez Volade.

Actions vs Filters : la différence fondamentale

Les actions

Une action est un point d'exécution dans le code WordPress où vous pouvez ajouter votre propre code. L'action ne retourne rien ?" elle exécute.

// Hook de base
add_action('wp_head', 'mon_fonction_meta');
function mon_fonction_meta() {
    echo '<meta name="auteur" content="Volade">';
}

// Action avec paramètres
add_action('save_post', 'mon_log_sauvegarde', 10, 3);
function mon_log_sauvegarde($post_id, $post, $update) {
    error_log("Post $post_id sauvegardé. Mise à jour : " . ($update ? 'oui' : 'non'));
}

Les filters

Un filter reçoit une valeur, la modifie, et la retourne. Il ne doit jamais faire d'effet de bord direct (echo, redirection, insertion BDD).

// Filter basique
add_filter('excerpt_length', 'mon_longeur_extrait');
function mon_longeur_extrait($length) {
    return 30; // 30 mots au lieu de 55
}

// Filter avec paramètres supplémentaires
add_filter('the_content', 'mon_ajout_cta', 20, 1);
function mon_ajout_cta($content) {
    if (is_single()) {
        $cta = '<p><a href="/contact" class="cta">Contactez-nous</a></p>';
        $content .= $cta;
    }
    return $content;
}

Tableau comparatif

CritèreActionFilter
ObjectifExécuter du codeModifier une valeur
Valeur de retourRien (void)La valeur modifiée
Fonction hookdo_action()apply_filters()
Ajout hookadd_action()add_filter()
Paramètre principalNom du hookLa valeur à filtrer
Effet de bord autoriséOuiNon (idéalement)

Priorité et paramètres

Comprendre la priorité

La priorité (3e argument) détermine l'ordre d'exécution des hooks attachés au même point. Plus le chiffre est bas, plus l'exécution est précoce.

// Ordre d'exécution : C (5) ?' A (10) ?' B (10) ?' D (100)
add_action('init', 'fonction_a', 10);
add_action('init', 'fonction_b', 10);
add_action('init', 'fonction_c', 5);
add_action('init', 'fonction_d', 100);

:::callout-warning

Ne mettez pas toutes vos fonctions à priorité 10 par défaut. Si trois plugins se greffent sur wp_enqueue_scripts à priorité 10, l'ordre est indéterminé. Utilisez 5, 10, 20, 100 pour laisser de l'espace aux autres.

:::

Gérer les paramètres

Le 4e argument de add_action / add_filter est le nombre de paramètres que votre fonction accepte.

// Le hook save_post passe 3 paramètres
add_action('save_post', 'mon_handler', 10, 3);

function mon_handler($post_id, $post, $update) {
    // $post_id : ID du post sauvegardé
    // $post : objet WP_Post complet
    // $update : booléen (true = mise à jour, false = création)
}

Si vous ne spécifiez pas accepted_args, WordPress ne passe qu'un paramètre ?" les autres sont silencieusement ignorés.

Erreur fréquenteSymptômeSolution
accepted_args non définiLa fonction reçoit moins de données que prévuToujours préciser accepted_args quand > 1
Priorité identiqueOrdre d'exécution aléatoire entre plusieurs pluginsEspacer les priorités (5, 10, 20, 50, 100)
Paramètre non passé par référenceModifications non persistéesUtiliser &$var si le hook le permet

Créer vos propres hooks

Quand créer un hook personnalisé

  • Votre plugin ou thème doit être extensible par d'autres développeurs
  • Vous voulez permettre de modifier des valeurs sans toucher à votre code
  • Vous avez des points stratégiques dans votre code où d'autres pourraient avoir besoin d'intervenir

Créer une action personnalisée

// Dans votre plugin
function volade_envoyer_email_bienvenue($user_id) {
    $user = get_userdata($user_id);
    // Envoi de l'email...

    // Permettre à d'autres plugins d'ajouter des actions après l'envoi
    do_action('volade_apres_email_bienvenue', $user_id, $user);
}

// Dans un autre plugin ou theme
add_action('volade_apres_email_bienvenue', 'mon_ajout_log_email', 10, 2);
function mon_ajout_log_email($user_id, $user) {
    error_log("Email de bienvenue envoyé à {$user->user_email}");
}

Créer un filter personnalisé

// Dans votre plugin
function volade_prix_produit($produit_id) {
    $prix = get_post_meta($produit_id, 'prix', true);

    // Permettre aux extensions de modifier le prix
    return apply_filters('volade_prix_produit', $prix, $produit_id);
}

// Dans une extension
add_filter('volade_prix_produit', 'mon_appliquer_reduction', 10, 2);
function mon_appliquer_reduction($prix, $produit_id) {
    if (has_term('promo', 'tag_produit', $produit_id)) {
        return $prix * 0.9; // -10 %
    }
    return $prix;
}

Conventions de nommage

ConventionExempleUsage
{plugin}_{action}_volade_avant_envoi_emailActions
{plugin}_filter_{nom}volade_filter_prixFilters (alternatif)
{plugin}_{resource}_{action}volade_commande_avant_paiementActions spécifiques
{plugin}_{resource}_filtervolade_commande_filter_totalFilters spécifiques

Quand vous créez un hook personnalisé, adoptez ces 3 réflexes : 1) préfixez TOUS vos hooks avec votre namespace (ex: volade_) ?" c'est le seul moyen d'éviter les collisions avec d'autres plugins ; 2) documentez chaque hook avec un bloc PHPDoc complet (@param, @return, @since, @example) ?" un hook que personne ne comprend est un hook inutile ; 3) passez systématiquement les paramètres supplémentaires (3e argument de add_action/add_filter) même si votre fonction n'en a pas besoin aujourd'hui ?" vous ou un autre développeur en aurez besoin demain et devrez modifier le code sans casser la rétrocompatibilité.


Hooks conditionnels (conditional hooks)

N'exécuter un hook que dans certains contextes

// Hook conditionnel basé sur une capability
if (current_user_can('manage_options')) {
    add_action('admin_bar_menu', 'mon_ajout_admin_bar_link', 100);
}

// Hook conditionnel basé sur un type de post
if (get_post_type() === 'produit') {
    add_filter('the_content', 'mon_cta_produit');
}

// Hook conditionnel basé sur une page spécifique
add_action('template_redirect', function() {
    if (is_page('contact')) {
        add_action('wp_footer', 'mon_script_tracking_contact');
    }
});

Les hooks conditionnels natifs WordPress

HookDéclencheur
initWordPress chargé, avant tout header
wp_loadedToutes les requêtes WordPress sont traitées
template_redirectAvant la sélection du template
wp_enqueue_scriptsChargement des scripts et styles
admin_enqueue_scriptsChargement des scripts admin
save_postSauvegarde d'un post
wp_loginConnexion utilisateur
wp_logoutDéconnexion utilisateur
user_registerNouvel utilisateur créé
deleted_postPost supprimé

Exemples concrets de hooks avancés

Exemple 1 : Ajouter une colonne personnalisée dans l'admin

// Ajouter la colonne
add_filter('manage_posts_columns', 'ajouter_colonne_extrait');
function ajouter_colonne_extrait($columns) {
    $columns['extrait'] = 'Extrait';
    return $columns;
}

// Afficher le contenu de la colonne
add_action('manage_posts_custom_column', 'afficher_colonne_extrait', 10, 2);
function afficher_colonne_extrait($column_name, $post_id) {
    if ($column_name === 'extrait') {
        echo wp_trim_words(get_the_excerpt($post_id), 20);
    }
}

Exemple 2 : Modifier la requête principale

add_action('pre_get_posts', 'modifier_query_archive');
function modifier_query_archive($query) {
    if (!is_admin() && $query->is_main_query() && is_post_type_archive('produit')) {
        $query->set('posts_per_page', 24);
        $query->set('orderby', 'meta_value_num');
        $query->set('meta_key', 'prix');
        $query->set('order', 'ASC');
    }
}

Exemple 3 : Redirection après connexion personnalisée

add_filter('login_redirect', 'rediriger_apres_login', 10, 3);
function rediriger_apres_login($redirect_to, $request, $user) {
    if (isset($user->roles) && in_array('subscriber', $user->roles)) {
        return home_url('/mon-compte/');
    }
    return $redirect_to;
}

Bonnes pratiques

Pour déboguer un hook qui ne s'exécute pas, activez le mode WP_DEBUG et ajoutez temporairement error_log( 'Hook exécuté : ' . current_filter() ) dans votre callback. Si le message n'apparaît pas dans les logs, le problème est dans l'ordre d'exécution ?" vérifiez que votre priorité (3e argument) est suffisamment basse (5 ou 1) et que votre accepted_args correspond bien aux paramètres passés par le hook. 80 % des bugs de hooks viennent d'un mauvais accepted_args ou d'une priorité trop haute.

Checklist du hook bien écrit

  • Nom de hook unique et préfixé avec votre namespace
  • Priorité explicitement définie et espacée des autres
  • accepted_args toujours précisé quand > 1
  • Documentation du hook (paramètres, type de retour, exemple)
  • Hook exécuté au bon moment du cycle de vie WordPress
  • Dans un filter : toujours retourner la valeur modifiée (jamais null sauf si explicite)
  • Dans une action : pas de valeur de retour utilisée par l'appelant

Anti-patterns à éviter

// ? ?VITER : filter avec effet de bord
add_filter('the_title', 'mauvais_filter');
function mauvais_filter($title) {
    update_post_meta(get_the_ID(), 'dernier_acces', time()); // EFFET DE BORD
    return $title;
}

// ? ?VITER : priorité trop large
add_action('init', 'fonction_totale', 10); // 10 000 plugins sur init à 10
add_action('init', 'fonction_importante', 10); // ordre aléatoire

// ? ?VITER : paramètres manquants
add_action('save_post', 'mon_handler'); // reçoit 1 paramètre, pas 3

Ce qu'on retient

Le système de hooks de WordPress est à la fois simple et profond. Actions et filters partagent la même mécanique mais ont des usages distincts.

Maîtrisez les priorités : ne laissez pas l'ordre d'exécution au hasard. Espacez vos priorités (5, 10, 20, 50, 100) pour laisser de la place à d'autres extensions.

Spécifiez toujours accepted_args : c'est la source numéro 1 de bugs silencieux dans les hooks. Si vous attendez 3 paramètres, écrivez add_action('hook', 'func', 10, 3).

Créez des hooks personnalisés : c'est ce qui distingue un plugin fermé d'un plugin extensible. do_action('mon_prefixe_event') et apply_filters('mon_prefixe_filter', $value) sont vos meilleurs outils.

Documentez vos hooks : un hook sans documentation est un hook que personne n'utilisera.


Article mis à jour le 9 juillet 2026. Sources : WordPress Plugin Developer Handbook, documentation Code Reference, retours d'expérience Volade.




FAQ — Hooks WordPress 2026 :

Qu'est-ce que Hooks WordPress 2026 : ?

Les hooks sont le système nerveux de WordPress. Sans eux, il serait impossible d'étendre le CMS sans modifier le code source. Actions et filters sont ce qui fait de WordPress une plateforme extensible plutôt qu'un simple logiciel.

Actions vs Filters : la différence fondamentale : quels sont les points clés ?

Les actions

Une action est un point d'exécution dans le code WordPress où vous pouvez ajouter votre propre code. L'action ne retourne rien ?" elle exécute. php

// Hook de base

add_action('wp_head', 'mon_fonction_meta');

function mon_fonction_meta() { echo '<meta name="auteur" content="Volade">';

}

// Action avec paramètres

add_action('save_post', 'mon_log_sauvegarde', 10, 3);

function mon_log_

Priorité et paramètres : quels sont les points clés ?

Comprendre la priorité

La priorité (3e argument) détermine l'ordre d'exécution des hooks attachés au même point. Plus le chiffre est bas, plus l'exécution est précoce. php

// Ordre d'exécution : C (5) ?' A (10) ?' B (10) ?' D (100)

add_action('init', 'fonction_a', 10);

add_action('init', 'fonction_b', 10);

add_action('init', 'fonction_c', 5);

add_action('init', 'fonction_d', 100); Ne mettez pa

Créer vos propres hooks : quels sont les points clés ?

Quand créer un hook personnalisé

Votre plugin ou thème doit être extensible par d'autres développeurs

Vous voulez permettre de modifier des valeurs sans toucher à votre code

Vous avez des points stratégiques dans votre code où d'autres pourraient avoir besoin d'intervenir

Créer une action personnalisée

php

// Dans votre plugin

function volade_envoyer_email_bienvenue($user_id) { $user = get

Hooks conditionnels (conditional hooks) : quels sont les points clés ?

N'exécuter un hook que dans certains contextes

php

// Hook conditionnel basé sur une capability

if (current_user_can('manage_options')) { add_action('admin_bar_menu', 'mon_ajout_admin_bar_link', 100);

}

// Hook conditionnel basé sur un type de post

if (get_post_type() === 'produit') { add_filter('the_content', 'mon_cta_produit');

}

// Hook conditionnel basé sur une page spécifique

add_action('

Exemples concrets de hooks avancés : quels sont les points clés ?

Exemple 1 : Ajouter une colonne personnalisée dans l'admin

php

// Ajouter la colonne

add_filter('manage_posts_columns', 'ajouter_colonne_extrait');

function ajouter_colonne_extrait($columns) { $columns'extrait' = 'Extrait'; return $columns;

}

// Afficher le contenu de la colonne

add_action('manage_posts_custom_column', 'afficher_colonne_extrait', 10, 2);

function afficher_colonne_extrait($colu

Bonnes pratiques : quels sont les points clés ?

Pour déboguer un hook qui ne s'exécute pas, activez le mode WP_DEBUG et ajoutez temporairement error_log( 'Hook exécuté : ' . current_filter() ) dans votre callback. Si le message n'apparaît pas dans les logs, le problème est dans l'ordre d'exécution ?" vérifiez que votre priorité (3e argument) est suffisamment basse (5 ou 1) et que votre accepted_args correspond bien aux paramètres passés par le

Ce qu'on retient : quels sont les points clés ?

Le système de hooks de WordPress est à la fois simple et profond. Actions et filters partagent la même mécanique mais ont des usages distincts. Maîtrisez les priorités : ne laissez pas l'ordre d'exécution au hasard.

Quels sont les prérequis pour se lancer ?

Avant de commencer, assurez-vous d'avoir les bases : un site ou projet bien défini, des objectifs clairs, et les ressources nécessaires (temps, budget, compétences). Le reste s'acquiert en chemin.

Par où commencer après avoir lu cet article ?

Identifiez votre besoin prioritaire, choisissez 2-3 actions concrètes de cet article, et lancez-vous cette semaine. Fixez-vous un point dans 30 jours pour ajuster. L'important est de passer à l'action.

Pret a passer a l'action ?

Explorez le catalogue Volade — sans compte pour commencer.

Voir les extensionsVoir les tarifs V+
Gratuit pour commencerSans carte bancaireWordPress-firstMaintenu en 2026
Discussion

Votre avis compte

Commentez « Hooks WordPress 2026 : guide complet pour développeurs ?" actions, filters, création, bonnes pratiques » ou notez cet article pour aider la communauté.

0

personnes ont partagé cet article

Partager sur

Sources & crédits

Documentation WordPress, tickets support Volade et tests terrain sur sites marchands.

#wordpress#hooks#actions#filters#développement#plugins#2026

Ne manquez aucune sortie

Guides WordPress, WooCommerce et TikTok Shop — directement dans votre boîte mail.