Pour n’afficher que la livraison offerte quand le client y a droit, cochez dans WooCommerce la case « Masquer les frais de port lorsque la livraison gratuite est disponible ». Plus besoin de fichier à déposer sur le serveur comme à l’époque de la première version de cet article. Il reste un cas où un court code est utile : quand la livraison gratuite vient d’une autre extension.
En bref
- Le problème : une fois le seuil atteint, le client voit encore les tarifs payants et peut en choisir un par erreur.
- La solution native : une case dans WooCommerce > Réglages > Expédition > Réglages de livraison.
- Le retrait en magasin reste affiché, ce qui est le comportement attendu.
- La case ne reconnaît que la méthode « Livraison gratuite » de WooCommerce.
- Gratuité calculée par une extension ? Un code de quelques lignes fait le même travail.
Le problème
Vous proposez plusieurs modes de livraison, et la livraison offerte à partir d’un certain montant. Quand le client atteint ce montant, WooCommerce affiche la livraison gratuite… à côté du Colissimo à 7,90 € et du point relais à 4,90 €. C’est confus, et certains clients cochent une option payante sans s’en rendre compte.
La solution native, en trois étapes
- Créez la livraison gratuite. Dans WooCommerce > Réglages > Expédition, ouvrez votre zone, ajoutez la méthode Livraison gratuite et choisissez « Montant minimum de commande » avec votre seuil.
- Cochez la case. Toujours dans l’onglet Expédition, section Réglages de livraison, cochez Masquer les frais de port lorsque la livraison gratuite est disponible, puis enregistrez.
- Testez. Faites un panier sous le seuil, puis un panier au-dessus. Au-dessus, seule la livraison offerte doit rester, avec le retrait en magasin si vous le proposez.
Le résultat ne change pas ? WooCommerce garde les tarifs en cache. Cochez temporairement « Activer le mode de débogage » dans les mêmes réglages, refaites le test, puis décochez-le.
Le cas où la case ne suffit pas
La case de WooCommerce ne reconnaît que sa propre méthode « Livraison gratuite ». Si votre livraison offerte vient d’une autre extension, par exemple une ligne à 0 € dans une grille Flexible Shipping ou un tarif de transporteur, elle ne masquera rien.
Dans ce cas, ce code garde les tarifs à 0 € et le retrait en magasin, et masque le reste dès qu’une livraison gratuite existe :
add_filter( 'woocommerce_package_rates', 'wycan_seulement_livraison_offerte', 100 );
function wycan_seulement_livraison_offerte( $rates ) {
$methodes_retrait = array( 'local_pickup', 'pickup_location' );
$offertes = array();
$retraits = array();
foreach ( $rates as $rate_id => $rate ) {
if ( in_array( $rate->get_method_id(), $methodes_retrait, true ) ) {
$retraits[ $rate_id ] = $rate;
} elseif ( 0.0 === (float) $rate->get_cost() ) {
$offertes[ $rate_id ] = $rate;
}
}
return $offertes ? $offertes + $retraits : $rates;
} Où le placer ? Le plus simple est une extension comme Code Snippets. Vous pouvez aussi l’ajouter au fichier functions.php de votre thème enfant, ou dans un fichier PHP déposé dans wp-content/mu-plugins/ (créez le dossier s’il n’existe pas, et commencez le fichier par <?php). Un fichier dans mu-plugins s’active tout seul et ne peut pas être désactivé par erreur depuis l’administration.
Pour aller plus loin
Forfait, poids, codes promo, points relais : toutes les méthodes sont dans notre guide frais de port et livraison WooCommerce.
Vous préférez qu’on règle vos frais de port pour vous ? Écrivez-nous, on regarde votre boutique.