Le WordPress d'aujourd'hui, décodé pour les développeurs

E-commerce

Ajouter des frais conditionnels au panier avec woocommerce_cart_calculate_fees

Une recette pour facturer un supplément selon le contenu du panier grâce à ce hook précis, indépendamment de toute logique liée à l'expédition.

Par WordPress Développement • 20 octobre 2026 • 4 min de lecture • Aucun commentaire
Ajouter des frais conditionnels au panier avec woocommerce_cart_calculate_fees

Un magasin qui vend des articles fragiles facture un supplément d’emballage renforcé dès qu’un tel article rejoint le panier, sans passer par une extension tierce ni toucher à la configuration des méthodes d’expédition : le hook woocommerce_cart_calculate_fees suffit à coder cette règle métier directement.

Ce que ce hook expose et quand il s’exécute

Ce hook est déclenché depuis WC_Cart::calculate_fees(), une étape du calcul global des totaux du panier distincte du calcul de l’expédition ou des taxes. Il reçoit l’objet panier lui-même en argument, ce qui permet d’en parcourir le contenu avant de décider d’ajouter ou non un frais.

add_action( 'woocommerce_cart_calculate_fees', function( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }

    $contains_fragile = false;

    foreach ( $cart->get_cart() as $cart_item ) {
        if ( 'yes' === $cart_item['data']->get_meta( '_fragile' ) ) {
            $contains_fragile = true;
            break;
        }
    }

    if ( $contains_fragile ) {
        $cart->add_fee( 'Emballage renforcé', 4.50 );
    }
} );

La vérification is_admin() && ! defined( 'DOING_AJAX' ) en début de callback est une précaution standard sur ce hook précis : il peut aussi être déclenché dans un contexte d’administration lors du calcul manuel d’une commande, où l’on ne veut généralement pas reproduire une règle pensée pour le tunnel d’achat public.

La taxabilité du frais, un paramètre à décider explicitement

L'essentiel à retenir : Le hook expose l'objet panier lui-même en argument, ce qui permet d'en inspecter le contenu avant de décider d'un frais ; add_fee() prend en compte la taxabilité du frais comme un paramètre distinct, pas une valeur héritée du panier ; Ce hook s'exécute à chaque recalcul du panier, pas seulement une fois par session

La méthode add_fee() accepte plusieurs arguments au-delà du nom et du montant : un indicateur de taxabilité et, le cas échéant, une classe de taxe précise à appliquer à ce frais.

$cart->add_fee( 'Emballage renforcé', 4.50, true, '' );

Le troisième argument, à true, indique que ce frais doit être soumis à la taxe selon les règles standard de la boutique. Une erreur fréquente consiste à laisser ce paramètre à sa valeur par défaut sans y réfléchir : un frais non taxé alors qu’il devrait l’être fausse le total de TVA affiché, un écart qui ne saute pas toujours aux yeux tant que personne ne compare la TVA affichée au total réellement attendu.

Un recalcul qui peut arriver plus souvent qu’on ne l’imagine

WooCommerce recalcule les totaux du panier à de nombreuses occasions : ajout ou suppression d’un article, changement de quantité, changement d’adresse de livraison sur la page de commande, ou simple actualisation Ajax du récapitulatif. Le hook woocommerce_cart_calculate_fees se redéclenche à chaque fois. Un callback qui ajoute un frais sans condition claire, ou dont la condition dépend d’un état qui change entre deux recalculs, peut faire apparaître ou disparaître un frais de façon qui semble erratique au client si la logique n’est pas bien maîtrisée.

Ce qu’on vérifie systématiquement avant de valider ce type de règle en recette : recharger la page panier plusieurs fois de suite, avec et sans l’article déclencheur, pour s’assurer que le frais apparaît et disparaît de façon strictement cohérente avec le contenu réel du panier à cet instant précis.

Un frais négatif reste possible, avec prudence

La méthode add_fee() accepte également un montant négatif, ce qui permet techniquement de coder une réduction conditionnelle par ce même mécanisme plutôt que par un coupon classique. Cet usage reste toutefois marginal et moins lisible pour un client qu’une réduction affichée comme telle sur la ligne de coupon : il convient de le réserver à des cas où la logique de coupon standard de WooCommerce ne convient vraiment pas au besoin métier exprimé.

Ce qu’il faut retenir

woocommerce_cart_calculate_fees permet d’ajouter un supplément conditionné au contenu réel du panier, en s’appuyant sur l’objet panier transmis en argument pour construire la condition métier voulue. Décider explicitement de la taxabilité du frais et tester le recalcul dans plusieurs scénarios d’ajout et de retrait d’articles évitent les deux erreurs les plus fréquentes constatées sur ce hook.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

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

Voir tous ses articles

Dans la même veine

À lire aussi