vendredi 25 septembre 2026

À propos

Contact

E-commerce

Les hooks WooCommerce indispensables pour personnaliser une boutique sans plugin

Un tour d'horizon des actions et filtres WooCommerce les plus utiles pour modifier fiche produit, panier et tunnel de commande sans surcharger de templates.

Par Clément Hadrot • 11 février 2020 • 5 min de lecture • Aucun commentaire
Les hooks WooCommerce indispensables pour personnaliser une boutique sans plugin

Chaque semaine, un client demande la même chose sous des formes différentes : « Peut-on ajouter un message sous le bouton d’ajout au panier ? », « Peut-on masquer le prix pour les visiteurs non connectés ? », « Peut-on afficher un badge sur les produits en rupture ? ». À chaque fois, la tentation est de dupliquer un fichier de template WooCommerce dans le thème pour y glisser deux lignes. C’est rarement la bonne réponse.

WooCommerce a été conçu dès l’origine comme une extension profondément « hookable » : quasiment chaque bloc d’affichage et chaque étape de traitement est encadré par une action ou filtrable par un filtre. Apprendre à repérer le bon hook, c’est s’épargner des heures de maintenance et éviter que la moindre mise à jour de l’extension ne casse une surcharge de template devenue obsolète.

Les actions de la fiche produit

La page produit est probablement l’endroit où les hooks WooCommerce sont les plus denses. Le fichier content-single-product.php déclenche une série d’actions numérotées qui définissent l’ordre d’affichage : woocommerce_before_single_product, woocommerce_single_product_summary, woocommerce_after_single_product. À l’intérieur du résumé, on retrouve notamment :

  • woocommerce_single_product_summary (titre à la priorité 5, prix à 10, excerpt à 20, formulaire d’ajout au panier à 30, méta produit à 40, partage social à 50) ;
  • woocommerce_before_add_to_cart_button et woocommerce_after_add_to_cart_button, parfaits pour ajouter un texte de réassurance ou un compte à rebours de promotion ;
  • woocommerce_product_meta_end, souvent utilisé pour ajouter des informations de livraison ou un lien vers une fiche technique.

Ajouter un badge « Stock faible » sous le bouton d’achat tient alors en quelques lignes, sans surcharger le moindre fichier :

add_action( 'woocommerce_after_add_to_cart_button', function () {
    global $product;
    if ( $product->managing_stock() && $product->get_stock_quantity() > 0 && $product->get_stock_quantity() <= 3 ) {
        printf(
            '<p class="stock-badge">Plus que %d en stock !</p>',
            esc_html( $product->get_stock_quantity() )
        );
    }
} );

Filtrer plutôt qu’afficher : les filtres de prix et de disponibilité

Les actions ajoutent du contenu ; les filtres modifient une valeur existante avant qu’elle ne soit utilisée. Pour du B2B, il est courant de masquer les prix aux visiteurs non connectés avec woocommerce_get_price_html :

add_filter( 'woocommerce_get_price_html', function ( $price, $product ) {
    if ( ! is_user_logged_in() ) {
        return '<a href="' . esc_url( wc_get_page_permalink( 'myaccount' ) ) . '">Connectez-vous pour voir le prix</a>';
    }
    return $price;
}, 10, 2 );
L'essentiel à retenir : WooCommerce s'appuie sur les mêmes actions et filtres que WordPress core ; La majorité des personnalisations se font sans toucher un seul template ; Un hook mal placé peut casser le calcul des totaux du panier

Ce même principe s’applique à la disponibilité avec woocommerce_is_purchasable, à la description courte avec woocommerce_short_description, ou encore au texte du bouton d’ajout au panier avec woocommerce_product_add_to_cart_text. Dans tous les cas, la règle est identique : un filtre reçoit une valeur, la modifie, et la retourne — jamais d’affichage direct à l’intérieur.

Panier et tunnel de commande

Le panier expose ses propres points d’ancrage : woocommerce_before_cart_table, woocommerce_cart_collaterals pour la zone des totaux et des codes promo, ou woocommerce_cart_calculate_fees pour ajouter des frais conditionnels, par exemple une éco-participation ou un supplément pour livraison en zone reculée :

add_action( 'woocommerce_cart_calculate_fees', function ( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }
    if ( $cart->get_cart_contents_weight() > 30 ) {
        $cart->add_fee( 'Supplément colis lourd', 9.90 );
    }
} );

Côté commande, woocommerce_checkout_update_order_meta permet d’enregistrer une méta personnalisée saisie sur un champ de checkout ajouté via woocommerce_checkout_fields, tandis que woocommerce_order_status_changed ouvre la porte à des automatisations : notification Slack interne, création d’un ticket de préparation, mise à jour d’un CRM externe.

Repérer le bon hook sans deviner

Deviner un nom de hook au hasard est une perte de temps. Trois réflexes évitent cette impasse :

  1. Chercher directement dans le code source de WooCommerce (dossier templates/ et classes class-wc-*) : chaque do_action et apply_filters y est visible avec ses paramètres exacts.
  2. Utiliser un plugin de débogage comme Query Monitor, qui liste tous les hooks déclenchés sur une page donnée, avec leurs callbacks attachés.
  3. Consulter le WooCommerce Hook Reference officiel sur developer.woocommerce.com, régulièrement mis à jour à chaque version majeure.

Sur nos projets, la règle interne est simple : avant de copier un template dans le thème, on cherche d’abord s’il existe un hook. En pratique, neuf demandes sur dix se résolvent sans surcharge de fichier.

Les pièges à éviter

Un hook mal utilisé peut avoir des effets de bord sérieux. Modifier le prix affiché via woocommerce_get_price_html ne change que l’affichage : le prix réel utilisé pour le calcul des totaux reste celui du produit, ce qui peut créer une incohérence si l’objectif était réellement de changer le tarif — pour cela, il faut passer par woocommerce_product_get_price ou une règle de prix dynamique. De même, greffer une action lourde (appel API externe, requête SQL complexe) sur un hook déclenché à chaque affichage de fiche produit peut ralentir sérieusement une boutique à fort trafic : il vaut mieux mettre ces résultats en cache avec un transient.

En résumé

Les hooks sont le langage natif de WooCommerce : ils permettent d’ajouter, de retirer ou de transformer un comportement sans jamais dupliquer un template entier. Prendre le temps de les identifier précisément, plutôt que de recopier un fichier PHP par réflexe, c’est garantir une boutique qui survit aux mises à jour et un code que la prochaine personne comprendra sans devoir comparer deux versions de single-product.php à la loupe.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi