Sur certaines boutique en ligne, il peut-être intéressant d’empêcher vos clients de réaliser une commande, si le prix total de celle-ci est inférieur à un montant défini.

Vous recherchez un développeur WordPress capable de vous créer un thème sur-mesure ? C'est mon métier depuis plus de 8 ans, prenez contact et discutons de votre projet.

Sur votre e-Commerce fonctionnant avec l’extension WooCommerce, vous pouvez exiger un montant minimum lors du passage d’une commande. Très pratique lorsque vous avez des frais de gestion particulier, et qu’il est nécessaire pour vous de rester rentable.

Voici la méthode pour mettre en place une telle fonctionnalité.

Étape 1 – Modifier le fichier functions.php

Copiez le code ci-dessous, et collez-le dans le fichier functions.php de votre thème courant :

add_action('woocommerce_before_checkout_process','mgris_minimum_order');

function mgris_minimum_order() {
	global $woocommerce;
	// Modifier la variable $minorder par votre montant minimum.
	$minorder = 9.50;
	$panier = $woocommerce->cart->subtotal;

	if($panier<$minorder) {
		$woocommerce->add_error( sprintf(__('Désolé, pour pouvoir réaliser une commande en ligne, le montant de votre panier doit être supérieur à <strong>' . $minorder . '</strong> €. <br /><a href="%s">Retour à la boutique →</a><br />', 'textdomain'), get_permalink( woocommerce_get_page_id('shop') ) ) );
	}
}

Étape 2 – Modifier le montant minimum

A la ligne 6 de ce code, modifier la variable $minorder par le montant minimum souhaité. Dans mon cas, le montant est fixé à 9.50 €

Résultat

Désormais, il est impossible pour vos clients de passer une commande si le montant de celle-ci est inférieur au montant défini dans le code. Un message d’erreur apparaît juste avant le moment du paiement.

Crédits photo : DeGust

30 commentaires
  1. tab-ukulele

    Pas mal comme fonction surtout quand on offre les frais de port.

    Merci pour l’astuce comme d’habitude je garde dans les bacs.

    (Ps je suis une agence de biarritz, il me semble que tu est du pays basque non ?)

  2. Mickaël Gris auteur de l’article

    Salut, et merci pour ton retour d’expérience .
    Exactement, c’est un exemple de cas où cette méthode peut-être utile !

    Et sinon, oui, je suis au Pays basque.

  3. Julio Potier

    Hello

    Petite modif :
    home_url( ‘/boutique/’ );
    merci, c’est important car on peut hooker le contenu, là, on ne peut pas …

    1. Mickaël Gris auteur de l’article

      Salut Julio,

      Merci pour ton retour, je viens de faire la correction !

  4. Dominique

    Attention pour le lien de retour à la boutique il faut utiliser : get_permalink( woocommerce_get_page_id( ‘shop’ ) )

    1. Mickaël Gris auteur de l’article

      Bonjour Dominique,

      Merci beaucoup pour cette précision, c’est top ! Je viens de faire la correction.

  5. Bonjour, extra comme tuto, merci.
    Et pour empêcher la commande sur la base d’un nombre minimal de produits commandés (et non pas d’un montant minimum) ? C’est possible ? Merci.

    1. Après essai, ça fonctionne nickel… sauf que lorsque j’ai mis à jour mon panier avec un nombre minimal de produits, le message d’erreur apparaît encore. Il doit falloir faire une sorte de « reset » quelque part ? Voici mon code :

      add_action(‘woocommerce_before_checkout_process’,’jsam_minimum_order_by_quantity’);

      function jsam_minimum_order_by_quantity() {
      global $woocommerce;
      // Modifier la variable $minorder par votre montant minimum.
      $minorder = 12;
      $panier = floatval($_SESSION[‘get_cart_contents_count’]);

      if($panieradd_error( sprintf(__(‘Désolé, pour pouvoir réaliser une commande en ligne, le nombre de bouteilles doit être au moins égal à

      à ‘ . $minorder . ‘ Retour à la boutique →‘, ‘textdomain’), get_permalink( woocommerce_get_page_id

      (‘shop’) ) ) );
      }
      }

      1. Mickaël Gris auteur de l’article

        Bonjour Jean-Sam,

        Exactement, je pense qu’avec la variable de session tu dois pouvoir remonter cette information.

        Enfin pour te répondre, tu as supprimé la ligne du if($panier<$minorder)… et du coup ton message d'erreur sera toujours affiché, quoi qu'il arrive.

        Il faut la remettre et ça devrait fonctionner à nouveau !

        1. Merci de ta réponse, en fait le copier/coller n’a pas fonctionné et mon fichier comporte bien la ligne if($panier<$minorder…) etc.
          Afin de ne pas polluer la timeline avec mes demandes d'infos, m'autorises-tu à entrer en contact direct avec toi par mail ?
          Je dois me "sortir de cette problématique" et tu as manifestement les compétences professionnelles pour.
          A te lire, cordialement.

  6. Bonsoir,
    je débute la création d’une petite boutique en ligne. J’utilise woocommerce avec un thème de chez Kiesi.
    Une question : je voudrais pouvoir augmenter de 1 ou 2 euros à chaque produit ajouter au panier, au delà de 3 articles.
    Je m’explique, les frais de livraison globaux sont de 8,50€ (ce qui est très raisonnable), si, par exemple, qq’un prend une paire de chaussures, un manteau, une chemise, un pull, une bonnet etc. les 8,50€ seront largement dépassés… comme je vends des vêtements de seconde main de luxe et que mes prix sont bas je ne m’y retrouverai pas. Comment faire une classe de livraison spéciale.
    d’avance merci pour votre/vos réponses.

    1. Mickaël Gris auteur de l’article

      Salut Clo,

      Je pense qu’on s’éloigne du sujet de base. Il faudrait, je pense, que tu utilises les classes de livraisons de WooCommerce en fonction de la catégorie de tes produits pour pouvoir gérer ces frais de livraison au mieux.

      Tu trouveras l’option dans Produits > Classes de livraison

      Ensuite, tu peux aller dans WooCommerce > Paramètres et dans l’onglet « Livraison ». Enfin, dans le sous-onglet tu choisis « Taux Fixe ».

      Dans cette dernière page, tu trouveras certainement des éléments de réponses. Je pense qu’il est possible d’ajouter des frais de livraison particulier sur chaque article, sur la globalité de la commande ou encore, par classe de livraison.

      Bon courage.

  7. Bonjour, J’avoue que je n’y comprend plus rien !
    Cette méthode fonctionnait à merveille.
    Depuis quelques jours : j’ai beau mettre 30 000 € dans le panier, avec « $minorder = 300.00; » la commande est bloquée et la phrase s’affiche quel que soit le montant du panier …

    1. Je pensais que ce problème venait du thème … mais même problème sur le thème de base « Twenty Twelve » …

    2. Mickaël Gris auteur de l’article

      Bonjour, et merci pour ton retour.

      Effectivement, depuis les dernières mises à jour, le code ne fonctionne plus correctement. Je viens d’y apporter un correctif !
      Il suffit de modifier la ligne 7 du code (le contenu de la variable $panier), par le code suivant : $woocommerce->cart->subtotal pour régler le soucis !

      L’article a été mis à jour en conséquence

  8. Bonjour,
    merci pour ce tuto, je voulais savoir si y a moyen de faire bloquer les commande au dessus d’un montant.
    je m’explique par exemple bloquer les commandes de plus de 1500€ et rediriger les clients à contacter ou passer par une autre méthode de commande que la commande en ligne (soucis de livraisons des objets de valeurs de plus de 1500€).

    Merci d’avance.

  9. Mickaël Gris auteur de l’article

    Bonjour,

    Merci pour ton retour .

    A priori oui tu peux faire la même chose pour bloquer les commandes qui auraient un montant supérieur à un nombre défini.
    Il faut juste un peu adapter le code de ce tutoriel en modifiant la conditions dans le if().
    Je pense même qu’il doit être possible de faire une redirection vers une page explicative lorsque le montant est trop important.

    Bon courage !

  10. DevAgency

    Bonjour,

    Très bon code. Fonctionne très bien.
    Cependant, je ne sais pas si cela vient de mon template, mais depuis la dernière mise à jour, la partie if ne fonctionne plus.
    Si le client met un montant supérieur ou égal au montant défini, tout fonctionne, mais si il met moins, alors la page fait mine de charger (comme si allait fonctionner) mais rien ne se passe et le message d’erreur ne s’affiche pas.

    Avez-vous eu d’autres retour comme celui-ci ?

    Cordialement.

  11. silvadori

    Avec la mise jour de woocommerce il faut utiliser cette fonction :

    add_action( ‘woocommerce_checkout_process’, ‘wc_minimum_order_amount’ );
    add_action( ‘woocommerce_before_cart’ , ‘wc_minimum_order_amount’ );

    function wc_minimum_order_amount() {
    // Set this variable to specify a minimum order value
    $minimum = 280;

    if ( WC()->cart->total cart->total )
    ), ‘error’
    );

    } else {

    wc_add_notice(
    sprintf( ‘Désolé, pour pouvoir réaliser une commande en ligne, le montant de votre panier doit être supérieur à %s Votre total actuel est %s.’ ,
    wc_price( $minimum ),
    wc_price( WC()->cart->total )
    ), ‘error’
    );

    }
    }

    }

  12. Bonjour à tous,
    C’est en cherchant une solution pour imposer un minimum de quantités des produits d’un webshop que je tombe sur votre article. Avez vous une idée de comment mettre cela en place avec WC, WP … et sans plugin?

    Un grd merci d’avance de vos conseils.

    Excellente journée.

    1. Mickaël Gris auteur de l’article

      Bonjour,

      Oui tu peux adapter le code sans problème. Actuellement $panier récupère le montant du panier. Il faut juste que tu adaptes la variable $panier pour lui dire de récupérer le nombre d’articles dans ton panier.

      Tu peux le faire en faisant $panier = sizeof(WC()->cart->get_cart());

      Il te suffit ensuite de changer $minorder par le nombre d’article minimum nécessaire pour autoriser ta commande.

      Bonne journée

  13. ALGO_Benoit

    Bonjour,

    Super code qui marche bien !
    Je suis débutant sur wordpress/woocommerce et j’aimerai ajouter 1 condition à ton code mais je suis vraiment pas doué en code. voilà ce que j’aimerai faire :

    Minimum commande = 35€ (Ca c’est ok avec ton code)
    condition : si produit « x » dans le panier alors minimum commande = 0€

    De plus, est-il possible d’ajouter la phrase d’obligation de minimum de commande directement dans le ‘shopping_cart’ ?

    Merci d’avance pour votre aide !

  14. Mickaël Gris auteur de l’article

    Salut,

    Tu peux parcourir le contenu de ton panier en faisant une boucle sur WC()->cart->get_cart(); et vérifier que si l’ID d’un produit X est dedans, alors, minorder = FALSE. et ensuite, si minorder = FALSE, alors tu n’entres pas dans la condition suivante.

    En gros, ça ressemblerait à ça :
    cart->get_cart();
    foreach($items as $item => $values) {
    if($values[‘data’]->get_id() == ID_DE_TON_PRODUIT) {
    $minorder = FALSE;
    }
    }

    Il te suffit d’ajouter cela juste avant la condition if($panier<$minorder), et d'ajouter une condition supplémentaire qui vérifie que $minorder n'est pas égal ) FALSE. Si tu as besoin d'aide supplémentaire, n'hésite pas à aller sur le Slack WPFR, tu y trouveras de l'aide .

Laisser un commentaire