De base, lorsque vous activez la livraison gratuite pour un montant défini ou toute autre condition, WooCommerce continue d’afficher vos différents modes de livraison. Voyons donc comment n’afficher que l’option de livraison gratuite si elle est active.
C’est une opération qui n’est pas trop compliquée qui ne demande que 2 minutes.
Commencez par vider le cache WooCommerce en allant dans le menu “Woocommerce > Etat > Outils > WooCommerce Trascients” et la cliquez sur le bouton “Effacer les données temporaires”.
Ensuite, ajoutez ce bout de code à votre fichier functions.php
Plan de l'article
TogglePour WordPress 3.0 & +
/**
* Cacher les frais de ports lorsque "livraison gratuite" est actif.
*/
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );
Pour WordPress 2.5
/**
* Cacher les frais de ports lorsque "livraison gratuite" est actif.
*/
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
/**
* Hide shipping rates when free shipping is available
*
* @param array $rates Array of rates found for the package
* @param array $package The package array/object being shipped
* @return array of modified rates
*/
function hide_shipping_when_free_is_available( $rates, $package ) {
// Only modify rates if free_shipping is present
if ( isset( $rates['free_shipping'] ) ) {
// To unset a single rate/method, do the following. This example unsets flat_rate shipping
unset( $rates['flat_rate'] );
// To unset all methods except for free_shipping, do the following
$free_shipping = $rates['free_shipping'];
$rates = array();
$rates['free_shipping'] = $free_shipping;
}
return $rates;
}
Et voilà, c’était aussi simple. A partir de maintenant, si la condition nécessaire pour obtenir la livraison gratuite, les autres modes de livraisons seront masqués.
12 Comments
Bonjour,
Merci pour cette aide précieuse. Cela fait plusieurs heures que j’essaie différentes fonctions sans résultats…J’ai enfin réussi à la faire fonctionner grâce à un élément clé de votre explication : “vider le cache” !!!
Un grand merci
Merci beaucoup pour ce code! C’est génial!
Malgré le fait que les frais de livraison sont offerts, j’aurais aimé gardé le point “retrait en magasin”.
Sauriez vous quoi ajouter dans le code?
Merci beaucoup
Belle journée
Bonjour Carole, essayez le code suivant :
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
// Only modify rates if free_shipping is present.
if ( ‘free_shipping’ === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
//Save local pickup if it’s present.
foreach ( $rates as $rate_id => $rate ) {
if (‘local_pickup’ === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
return $new_rates;
}
return $rates;
}
add_filter( ‘woocommerce_package_rates’, ‘hide_shipping_when_free_is_available’, 10, 2 );
Bonjour Grégory,
Mille mercis pour cette réponse ultra rapide et qui fonctionne parfaitement pour ma boutique!
Merci encore!
Belle journée
Bonsoir Grégory,
Tout d’abord, merci pour ce partage.
Par contre j’ai un problème, je veux aussi garder le “retrait en boutique” mais lorsque j’ajoute le code les 3 mode de livraison apparaisse (Gratuite, Payante et Retrait en boutique).
Je veux cacher le mode de livraison payant quand la gratuite est possible mais aussi garder le retrait en boutique.
Merci d’avance 🙂
Bonjour,
Cette methode ne semble plus fonctionner, le site ce met en erreur avec le code pour “les frais de livraison sont offerts, j’aurais aimé gardé le point « retrait en magasin »”, ci-dessus.
Avez-vous un correctif ? J’ai essayé de trouver l’erreur mais impossible à mon niveau.
Merci
Bonjour Franck, je suis désolé je n’ai pas vu votre message plus tôt !
Il me faudrait un accès a votre serveur pour trouver une solution, car de mon côté cela fonctionne toujours.
Bonjour,
pour ma part, le retrait gratuit sur place est conservé puis en dessous j’ai livraison gratuite à [adresse du client] mais on ne peut rien choisir il n’y a plus de bouton (de plus on peut pas choisir non plus comment on se fait livrer gratuitement).
Je passe par Boxtal.
Merci
Bonjour Lucie, dans ce cas le problème doit venir du plugin Boxtal. Cette solution n’est valable que pour les outils WooCommerce de base. Après, je vous répond, mais je n’ai jamais essayé boxtal.
Bonjour, merci pour ce code, avez-vous une version qui permettrait de garder une livraison expresse que je propose a mes clients ? tout en cachant la méthode payante lorsque elle est gratuite à partir de X € ?
La livraison express doit toujours être visible.
Bonjour Gregory,
Merci pour ce bout de code qui fonctionne parfaitement !
Pour ma part, je souhaite offrir la livraison en point relais à partir d’un certain montant, tout en gardant la possibilité de se faire livrer à domicile, qui reste un mode de livraison payant (mode forfait).
Lorsque j’utilise votre code, tout les autres modes de livraison sont masqués, ce qui empêche de client se voir l’option “livraison à domicile”.
Savez-vous quoi ajouter dans le code?
Merci beaucoup pour votre aide,
Bien à vous,
Marin
Bonjour
J’ai deux modes de livraisons
livraison 1 (sans signature) gratuit à partir de 100€
livraison 2 (avec signature) gratuit à partir de 300€
Le code fonctionne bien pour la livraison 1, mais dès 100€ il n’affiche plus que la livraison gratuite de 100€ ne permettant pas de choisir l’option avec signature.
Cordialement