Hooks et filtres WooCommerce essentiels
Les hooks sont le vrai super-pouvoir de WooCommerce : ils permettent de modifier presque tout — prix, panier, e-mails, tunnel de commande — sans surcharger de templates ni toucher au cœur de l’extension. Comprendre comment ils fonctionnent, c’est la différence entre une boutique qu’on personnalise proprement et une boutique qu’on bricole et qui casse à chaque mise à jour. Voici les hooks WooCommerce essentiels et la bonne manière de les utiliser.
Actions vs filtres : la distinction fondamentale
WooCommerce hérite du système de hooks de WordPress, qui se décline en deux familles. Une action (add_action) exécute du code à un moment précis du déroulé, sans rien renvoyer : par exemple woocommerce_thankyou se déclenche après une commande pour envoyer une notification ou pousser les données vers un ERP. Un filtre (add_filter) intercepte une donnée, la modifie et la renvoie : par exemple woocommerce_product_get_price pour ajuster un prix avant affichage.
La règle est simple : si vous voulez faire quelque chose, c’est une action ; si vous voulez changer une valeur, c’est un filtre. Un filtre doit toujours retourner la donnée reçue (modifiée ou non) — l’oublier est l’erreur la plus courante et elle casse silencieusement le prix, le panier ou le texte concerné.
Comment brancher un hook proprement
La signature complète d’un hook prend quatre arguments : le nom du hook, la fonction de rappel, la priorité et le nombre d’arguments attendus.
add_action( 'woocommerce_thankyou', 'monprefixe_apres_commande', 10, 1 );
function monprefixe_apres_commande( $order_id ) {
$order = wc_get_order( $order_id );
// Logique métier : e-mail interne, synchronisation ERP, etc.
}
La priorité (10 par défaut) décide de l’ordre d’exécution quand plusieurs fonctions partagent le même hook : un nombre plus bas passe avant. Le dernier paramètre indique combien d’arguments votre fonction doit recevoir — indispensable pour les filtres qui exposent le produit ou la commande en second argument. Préfixez systématiquement vos fonctions (monprefixe_) pour éviter tout conflit avec un autre plugin.
Les hooks WooCommerce à connaître par zone
Plutôt que de retenir une liste interminable, repérez les grandes zones du parcours d’achat et le hook qui y correspond.
| Zone | Hook | Usage typique |
|---|---|---|
| Page produit | woocommerce_after_add_to_cart_button |
Ajouter de la réassurance, un délai de livraison |
| Page produit | woocommerce_product_tabs (filtre) |
Ajouter ou retirer un onglet |
| Panier | woocommerce_before_cart |
Message promotionnel, seuil de livraison gratuite |
| Tunnel | woocommerce_checkout_fields (filtre) |
Ajouter, masquer ou réordonner des champs |
| Commande | woocommerce_thankyou |
Tracking, fidélité, intégration ERP |
| Commande | woocommerce_order_status_changed |
Automatiser un workflow selon le statut |
| E-mails | woocommerce_email_before_order_table |
Personnaliser les e-mails transactionnels |
| Prix | woocommerce_product_get_price (filtre) |
Tarifs par rôle, B2B, remises dynamiques |
Exemples concrets
Ajouter un champ de TVA dans le tunnel — utile pour le B2B :
add_filter( 'woocommerce_checkout_fields', 'monprefixe_champ_tva' );
function monprefixe_champ_tva( $fields ) {
$fields['billing']['billing_vat'] = array(
'label' => 'N° de TVA intracommunautaire',
'required' => false,
'class' => array( 'form-row-wide' ),
);
return $fields;
}
Appliquer un tarif professionnel via un filtre de prix :
add_filter( 'woocommerce_product_get_price', 'monprefixe_prix_pro', 10, 2 );
function monprefixe_prix_pro( $price, $product ) {
if ( current_user_can( 'wholesale_customer' ) ) {
$price = (float) $price * 0.9; // -10 % pour les comptes pros
}
return $price;
}
Afficher un bloc de réassurance sous le bouton d’ajout au panier :
add_action( 'woocommerce_after_add_to_cart_button', 'monprefixe_reassurance' );
function monprefixe_reassurance() {
echo '<p class="reassurance">Livraison sous 48 h · Retours gratuits 30 jours</p>';
}
Trouver le bon hook
Deux réflexes font gagner des heures. D’abord, la référence officielle des hooks de WooCommerce liste chaque point d’extension par template. Ensuite, en développement, un petit affichage du nom du hook à l’écran (ou un do_action tracé) permet de visualiser exactement quels hooks s’exécutent sur une page donnée, et dans quel ordre. C’est bien plus rapide que de deviner.
Erreurs fréquentes à éviter
- Oublier de retourner la valeur dans un filtre : la donnée devient vide ou nulle.
- Ne pas déclarer le bon nombre d’arguments : votre fonction ne reçoit pas le produit ou la commande attendus.
- Mettre la logique dans le thème plutôt que dans un plugin : tout disparaît au changement de thème.
- Multiplier les requêtes dans un hook fréquent (comme le rendu de chaque produit) : c’est un nid à lenteurs.
Personnaliser sans casser
Privilégiez toujours un hook à une surcharge de template, et un template surchargé via le thème enfant plutôt qu’une modification directe du cœur. Regroupez vos personnalisations dans une extension dédiée : c’est ce qui garantit qu’elles survivent aux mises à jour de WooCommerce comme du thème, et qu’un autre développeur pourra les reprendre.
Pour mettre tout ça en pratique, lisez créer un plugin WooCommerce, et surveillez les performances quand vous multipliez les hooks. Besoin d’un développement clé en main et maintenable ? Découvrez mon offre de plugin WooCommerce sur mesure ou l’ensemble de mes prestations de développeur WooCommerce freelance.