Frais de ports offerts pour la France Métropolitaine uniquement

Afin d’augmenter votre taux de conversion et/ou d’augmenter votre panier moyen, vous avez décidé, dans votre boutique PrestaShop, d’offrir les frais de ports au dessus d’un certain montant. Bonne idée !

Mais malheureusement, une petite lacune dans PrestaShop vous fera offrir les frais de port pour ce genre de commande quelle que soit l’adresse de livraison ! Autant offrir un Colissimo à 10 € pour la France n’est pas un problème en soi, autant le coût du même envoi pour une destination lointaine pourra vous faire perdre de l’argent si vos marges sont faibles.

La solution : limiter la gratuité des frais de port à la seule France Métropolitaine.


Pour cela, je vous propose une petite modification dans PrestaShop 1.5 (pour Prestashop 1.4.11.0, merci de regarder également en fin de cet article). Afin de ne pas modifier directement le coeur de PrestaShop, nous utiliserons la surcharge d’une classe.

Tout d’abord, il va vous falloir déterminer la « zone » unique pour laquelle vous souhaitez offrir les frais de port quand la commande dépasse un certain seuil. Pour cela, rendez-vous dans « Localisation » puis « Zones » et répérez l’ID de la zone en question (ici : 1) :

Liste des zones de livraison

Ensuite, téléchargez et dézippez ce fichier qui est une surcharge de la classe Cart (qui gère le panier). Ouvrez le fichier, et en ligne 198, remplacez le ACHANGER par la valeur de l’ID repéré précédemment :

$orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, null, null, false);
// 07/06/2013 Johann Corbel
// Frais de port offerts pour la France Métropolitaine uniquement
if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0 && intval($id_zone) == ACHANGER)
{
Cache::store($cache_id, $shipping_cost);
return $shipping_cost;
}

doit devenir

$orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, null, null, false);
// 07/06/2013 Johann Corbel
// Frais de port offerts pour la France Métropolitaine uniquement
if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0 && intval($id_zone) == 1)
{
Cache::store($cache_id, $shipping_cost);
return $shipping_cost;
}

Sauvegardez ce fichier modifié et uploadez-le dans le répertoire /override/classes de votre site.

[message_box title= »Attention » color= »red »]Afin que cette surcharge soit prise en compte, il sera probablement nécessaire que vous effaciez le fichier /cache/class_index.php (qui sera recréé automatiquement).[/message_box]

Dorénavant, seuls vos clients qui se font livrer en France Métropolitaine se verront donc appliquer la gratuité des frais de port !

[message_box title= »Et pour PrestaShop 1.4.11.0 ? » color= »yellow »]Pour PrestaShop 1.4.11.0, vous téléchargez et dézippez ce fichier. Ouvrez le fichier, et en ligne 170, remplacez le ACHANGER par la valeur de l’ID de la zone de la France Métropolitaine. Sauvegardez ce fichier modifié et uploadez-le dans le répertoire /override/classes de votre site, et le tour est joué ![/message_box]

Voir également

Module Forcer Robots pour PrestaShop

Il y a quelques temps, je vous proposais le module Ultimate noindex, qui permet de …

25 commentaires

  1. Peut-on envisager ce code pour la version 1.4 ? merci

  2. Encore un grand merci. Ce petit patch est magique et répond tout à fait aux besoins 🙂

  3. Peux-t-on désactiver les transporteurs lorsque le franco de port est atteint ? C’est à dire ne pas laisser le choix du mode de livraison au client quand il a atteint le franco ?
    Merci et bravo pour votre astuce communiquée.

  4. Ce module fait la même chose que ce que vous proposez, non ?
    Supprime-t-il de l’affichage les transporteurs gratuits ? Car c’est cela que je cherche à faire (quitte à vous payer, je préfère payer vos compétences que payer un tiers via addons – qui d’ailleurs n’est pas dans mes « bons papiers » et qui prend sa part au passage).
    Donc Johann, si un jour vous avez la soluce gratuite ou payante de faire en sorte que si les transporteurs sont gratuits une fois un certain montant et de fait ne s’affichent pas (possible qu’il y ai à la place juste un truc du genre un texte type « frais de livraisons offerts »), je suis preneuse.
    Bien à vous.

    • Non, il ne fait pas tout à fait la même chose que mon astuce. Ca se complète. Mon astuce permet de ne rendre les FDP gratuits quand on atteint le seuil de X euros QUE pour une zone géographique, mais si vous avez défini plusieurs transporteurs, TOUS ces transporteurs deviendront gratuits.
      Le module auquel je fais référence permet de paramétrer en plus le fait que seuls les transporteurs que vous aurez défini (typiquement, le moins cher) deviendront gratuits

      • Ok, donc il me sert à rien dans mon cas, puisque votre astuce répond à mon attente et besoin.
        Le seul plus qu’il me faudrait est que dans le cas de votre astuce, les transporteurs ne s’affichent pas au lieu de les avoir tous affichés gratuits, et dans l’idéal on voit un simple texte: « frais de transport offerts ».
        Merci de votre retour Johann.

  5. J ai installe le module comme convenu mais je me retrouve avec les frais de port offert pour toute les sommes et tous les pays ou est le soucis svp

    • Le fait de configurer un seuil au delà duquel les FDP sont offerts déclenche la gratuité des FDP pour toutes les zones de livraisons sous PrestaShop, c’est un éternel problème. Il est possible d’y remédier avec une autre modification.
      Par contre, l’execution de ce script ne doit pas avoir changé le seuil, il faut vérifier la config de votre boutique à ce niveau là

  6. Merci pour votre réponse rapide mais même en enlevant la gratuite de livraison a partir d un montant et en laissant a 0 j ai tous qui est gratuit je désespère
    J ai donc réinstallé le module a partir de zéro je les adapter a ma configuration et la tous les prix des transporteur sont afficher dans le BO mais un par un .j ai créer chaque transporteur pour chaque zone avec config au poids gramme toujours le même problème gratuite des livraison .Je précise que je suis en 1.5.2
    Quand j efface tous et que installe manuellement un transporteur et que je le configure pareil cela fonctionne donc je crois que je vais me les taper a la main si j ai pas de solutions le module ne doit pas fonctionner chez moi .

  7. Problème résolu j ai du modifie lID de toutes les entrées ID LANG par mon numero de langue de ma boutique
    Un grand merci pour votre travail

  8. La solution fonctionne sur 1.6 ?
    Cordialemement.
    Merci.

  9. Il semblerait que depuis la version 1.6.0.8 le bout de code plus haut ne fonctionne plus…

  10. Bonjour,
    Une personne indisuait que depuis la version 1.6.0.8 de prestahop, cette modification ne fonctionne plus.
    qu en est il ?
    🙂

  11. ma Version de PrestaShop 1.6.0.14
    ma question : peut-on avoir les frais de port gratuits seulement pour la France à partir d’un certain montant ex 80 euros
    et pour l’étranger une participation du client en fonction du montant ?

    merci d’avance

  12. j’ai la version 1.6.0.11 et je serais aussi intéressée par la modification. merci d’avance.

  13. Merci beaucoup pour cette solution.
    Fonctionne bien avec 1.6.1.1

  14. Merci, même 4 ans après ça sert toujours !

  15. Bonjour,
    Sauriez-vous me dire comment appliquer cette modification sur prestashop 1.7 (1.7.4.4) ?
    Merci d’avance !

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.