Cerca

WooCommerce: come impostare un ordine minimo e/o massimo (aggiornamento)

Acquisto minimo e-o massimo con WooCommerce
Acquisto minimo e-o massimo con WooCommerce

Acquisto minimo e-o massimo con WooCommerce

I motivi possono essere diversi, ma mi capita spesso di dover impostare in WooCommerce un valore minimo o massimo d’acquisto per un ordine. Il proprietario dello store decide che, per poter fare acquisti, deve esserci una spesa minima e/o massima di tot Euro.

Ci sono diversi plugin per questo scopo, la maggior parte a pagamento ed alcuni con funzionalità evolute, ma se l’esigenza è solo quella di stabilire un minimo d’ordine per tutto lo store, si può risolvere senza scomodare nessun plugin aggiuntivo di terze parti.

È sufficiente un semplice snippet, poche righe di codice da inserire nel file delle funzioni del tema.

Il codice va inserito nel file delle funzioni del tema, il solito functions.php, come al solito è meglio utilizzare un tema child, per salvaguardare le personalizzazioni al tema da futuri aggiornamenti.

Roberto Rota esperto WordPress e WooCommerce

Hai bisogno di aiuto con WooCommerce?

Se hai bisogno di assistenza per il tuo store WooCommerce, o anche solo per mettere in pratica queste istruzioni, contattami!

Acquisto minimo in WooCommerce

Poniamo il caso di voler impostare un ordine minimo di 30 Euro, questo è il codice codice da utilizzare, compatibile per le versioni 2.1 di WooCommerce e successive:

add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
 
function wc_minimum_order_amount() {
	// Valore da impostare per ordine minimo
	$minimum = 30;
 
	if ( WC()->cart->total < $minimum ) {
 
		if( is_cart() ) {
 
			wc_print_notice( 
				sprintf( 'Ordine minimo di %s, il tuo carrello contiene articoli per %s.' , 
					woocommerce_price( $minimum ), 
					woocommerce_price( WC()->cart->total )
				), 'error' 
			);
 
		} else {
 
			wc_add_notice( 
				sprintf( 'Ordine minimo di %s, il tuo carrello contiene articoli per %s.' , 
					woocommerce_price( $minimum ), 
					woocommerce_price( WC()->cart->total )
				), 'error' 
			);
 
		}
	}
 
}

Acquisto massimo in WooCommerce

Vediamo ora come definire un tetto massimo d’acquisto per un ordine, per esempio 900 Euro. Il codice da utilizzare è il seguente:

add_action( 'woocommerce_checkout_process', 'wc_maximum_order_amount' );
add_action( 'woocommerce_before_cart' , 'wc_maximum_order_amount' );
 
function wc_maximum_order_amount() {
	// Valore da impostare per ordine massimo
	$maximum = 900;
 
	if ( WC()->cart->total > $maximum ) {
 
		if( is_cart() ) {
 
			wc_print_notice( 
				sprintf( 'Ordine massimo di %s, il tuo carrello contiene articoli per un totale di %s.' , 
					woocommerce_price( $maximum ), 
					woocommerce_price( WC()->cart->total )
				), 'error' 
			);
 
		} else {
 
			wc_add_notice( 
				sprintf( 'Ordine massimo di %s, il tuo carrello contiene articoli per un totale di %s.' , 
					woocommerce_price( $maximum ), 
					woocommerce_price( WC()->cart->total )
				), 'error' 
			);
 
		}
	}
 
}

Come puoi notare, sono due snippet molto simili, cambiano solamente pochi termini.

Nota bene (per entrambi i codici):

  1. I due snippet possono essere utilizzati contemporaneamente.
  2. I valori minimo o massimo d’ordine vanno impostati nella riga n. 6, rispettivamente alla variabile $minimum o $maximum.
    Non bisogna inserire la valuta, viene assunta quella impostata in WooCommerce, e si possono utilizzare i decimali.
  3. Il messaggio che appare a chi cerca di effettuare ordinativi con un importo inferiore o superiore a quello stabilito è personalizzabile, e va modificato nelle righe n. 13 e n. 22
  4. L’ordine minimo o massimo viene calcolato sul totale del carrello, spedizioni comprese.
  5. Entrambi i codici sono stati testati con le versioni correnti, ossia WooCommerce 2.3.8, WordPress 4.2.1 e tema Storefront.
  6. Questi codici non funzionano con WooCommerce 2.0.x e precedenti, per queste versioni occorre utilizzare una diversa versione del codice reperibile nella documentazione di WooCommerce

Condividi se ti è piaciuto!

Altri articoli che potrebbero interessarti:

Picture of Roberto Rota

Roberto Rota

Libero professionista, un "artigiano del web", lavoro nella comunicazione in rete da quando esiste Internet. Mi occupo principalmente di assistenza su WordPress e assistenza e consulenza WooCommerce, seguo la realizzazione di progetti web, in particolare siti di e-commerce, visibilità e comunicazione in rete. Il mio curriculum è su Linkedin, e mi puoi trovare anche su Instagram, FaceBook e Twitter.

DAI IL TUO CONTRIBUTO

Se il mio lavoro ti è stato di aiuto, contribuisci alla continuità di questo sito.
Basta una piccola donazione su PayPal, una pizza e una birra alla tua salute!

40 risposte

  1. Buongiorno, è possibile integrare il codice aggiungendo che la regola dell’ordine minimo è valida solo per una nazione in particolare? Grazie

    1. Ciao Gaia, francamente non l’ho mai dovuto fare, ma immagino si possa aggiungere una condizione iniziale che limiti lo script per una nazione.
      Dovrei documentarmi ma così ad occhio non dovrebbe essere impossibile.

  2. Volevo solo segnalare che, per chi necessitasse di escludere le spese di spedizione dal calcolo dell’importo dell’ordine minimo, è sufficiente sostituire ogni volta che nel codice incontrate il termine “total” con “subtotal” 🙂 spero di aver fatto cosa gradita

  3. Penso che dovrebbe anche disabilitare il tasto “Procedi con l’ordine” altrimenti chi non legge va avanti lo stesso e paga… a quel punto o gli restituisci i soldi o processi l’ordine (magari in perdita)

    1. Ciao Diego,
      vado a memoria ma in teoria dovrebbe bloccare la possibilità di ordinare.

      Appena riesco faccio una verifica, grazie per la segnalazione!

      rob

  4. Salve ho modificato il tuo codice pensando all’inverso (ordine massimo in quantità) ma non funziona, cosa ho sbagliato.

    add_action( ‘woocommerce_check_cart_items’, ‘set_massimo__prodotti_checkout’ );
    function set_massimo__prodotti_checkout() {
    if( is_cart() || is_checkout() ) {
    global $woocommerce;
    // definire qui il numero minimo di prodotti
    $maximum_num_products = 2;
    $cart_num_products = WC()->cart->cart_contents_count;
    if( $cart_num_products > $maximum_num_products ) { // Messaggio di errore personalizzabile wc_add_notice( sprintf( ‘Ordine massimo possibile è di %s prodotti. Prodotti attualmente nel tuo carrello: %s.’, $maximum_num_products, $cart_num_products ), ‘error’ ); } }

    1. Ciao Rocco, questo snippet riguarda il carrello nel suo globale, la vedo impegnativa se non ardua impostare con dei filtri per le categorie.
      Ci sono però plugin che gestiscono i quantitativi di articoli acquistabili, magari potrebbero tornare utili.

      rob

  5. Ciao, ho provato lo snippet e funziona perfettamente anche con l’ultima versione di woocommerce. Ma anche io, come l’utente Luca Lovino, vorrei impostare l’ordine minino solo su una categoria di prodotti. Non è possibile impostare lo snippet che funzioni solo su certe categorie o tag?

    Spero tu possa aiutarmi.
    Grazie mille in anticipo, indipendentemente se potrai o meno aiutarmi.

    Ciao
    Tony

    1. Questo snippet non credo proprio, visto che va a prendere il totale dell’ordine.

      Non so se ci sono soluzioni specifiche per categoria, dovrei documentarmi.

      rob

  6. Ciao io ho bisogno di un aiuto. Vorrei impostare uno snippet che, in base al peso totale nel carrello, il prezzo si azzera. Mi spiego meglio. Se il totale del peso dei prodotti è minore o uguale a 8, il prezzo da pagare è 0. Se il peso è uguale o maggiore a 9 il prezzo totale dei prodotti rimane così com’è. Spero di essermi spiegato. Grazie

    1. A me personalmente non è mai capitato di doverlo fare, in rete però ci sono diversi snippet che lavorano con il peso dell’ordine, magari puoi trovarne uno facilmente adattabile.

      rob

  7. Ciao Roberto, avrei una domanda. Ho impostato un minimo d’ordine per il mio sito…funziona perfettamente, quindi grazie. Ora dal minimo d’ordine vorrei escludere una singola categoria per particolari acquisti al di sotto del limite impostato. E’ possibile farlo? Ti ringrazio in anticipo per l’aiuto che potrai darmi. Cordiali saluti

    1. Ciao Luca, lo snippet non fa distinzioni ma prende solo il totale dell’ordine. Sinceramente non mi hanno mai chiesto nulla del genere, dovrei documentarmi.

      rob

  8. Ciao Roberto, grazie mille per il tuo snippet, funziona perfettamente! Avrei una domanda però, nel mio shop dovrei inserire un ordine minimo di prodotti (limite minimo 6 prodotti), piuttosto che il minimo in €. Come posso fare?
    Ti ringrazio anticipatamente

    1. Puoi usare questo snippet:

      add_action( 'woocommerce_check_cart_items', 'set_minimo__prodotti_checkout' );
      function set_minimo__prodotti_checkout() {
      if( is_cart() || is_checkout() ) {
      global $woocommerce;
      // definire qui il numero minimo di prodotti
      $minimum_num_products = 20;
      $cart_num_products = WC()->cart->cart_contents_count;
      if( $cart_num_products < $minimum_num_products ) { // Messaggio di errore personalizzabile wc_add_notice( sprintf( 'Ordine minimo richiesto di %s prodotti. Prodotti attualmente nel tuo carrello: %s.', $minimum_num_products, $cart_num_products ), 'error' ); } }

  9. Salve Roberto e grazie per questo post.
    Ho inserito il codice ed il messaggio di avviso appare ma permette lo stesso di andare avanti con il checkout. E’ possibile bloccare il processo di checkout quando la nostra condizione non è soddisfatta?
    Grazie mille in anticipo!

    1. Sei sicuro di averlo inserito correttamente? In teoria dovrebbe venirti fuori un avviso e l’impossibilità di continuare.

      A meno che lo script non vada in conflitto con qualche plugin o con il tema…

      rob

        1. Come ti ho già detto, quando si parla di snippet potrebbe esserci un qualche conflitto con elementi utilizzati nell’installazione, temi o plugin che siano.
          Senza un minimo di verifica/debug è difficile dire di più.

          rob

  10. Ciao Roberto, questo codice è valido solo per tutto lo STORE. Se io volessi applicarlo ad una sola catogoria?

    ES. ho un un prodotto in quella categoria che si vende soltanto con un minimo di 10pz, come si fa?

    ES. se volessi applicarlo ad un singolo prodotto?

    Grazie 🙂

  11. Buonasera Roberto,
    volevo chiederti se esiste un modo per impostare un costo minimo d’ordine per un ruolo specifico ?
    Ho un ruolo utente “wholesale” che ha i prezzi scontati, pero’ vorrei che effettuasse un ordine minimo di 150€ per acquistare.. Mi sapresti dire qualcosa ?

    Ti ringrazio !!
    Luca

    1. Così, su due piedi, mi verrebbe da dire che applicare un condizionale in base al ruolo utente allo snippet di questo articolo non dovrebbe essere un grosso problema.

      rob

          1. Ciao Roberto,
            volevo chiederti un consiglio.
            Woocommerce se un cliente effettua l’ordine invia la mail al cliente con il riepilogo dell’ordine.
            Pero a me che sono l’amministratore non arriva nulla, nemmeno una notifica che il cliente tale ha effettuato un ordine.

            Se spedisce al cliente presumo che sia corretto la parte smtp delle mail.

            Cosa puo essere ?

            Grazie

            1. Ciao Emiliano, hai verificato che le mail all’amministratore non siano state disattivate per qualche motivo?

              Se sono attive, potrebbe essere un problema dell’hosting se la mail dell’amministratore ha lo stesso dominio dell’e-commerce.

              rob

  12. Io ho versione 2.0.20, e per vari motivi di customizzazione non posso aggiornare a breve, che modifiche vanno apportate al codice?

    1. Per la tua versione dovrebbe andare questa versione:

      add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );

      function wc_minimum_order_amount() {
      global $woocommerce;
      $minimum = 10;
      if ( $woocommerce->cart->get_cart_total() < $minimum ) { $woocommerce->add_error( sprintf( 'Devi avere un ordine minimo di %s per poter completare questo ordine.' , $minimum ) );
      }
      }

      rob

  13. Ciao Roberto. Grazie per i tuoi, sempre preziosi, consigli. Sai se il codice sopra riportato è valido con la versione 2.1.12. Ho inserito il codice nel function del chil ma mi da un errore sia in fornend, sia in backend.
    Grazie e buona giornata.
    Alfredo

    1. Ciao Alfredo, io uso lo stesso codice in almeno un paio di installazioni, tutte aggiornate all’ultima versione di WordPress e WooCommerce.
      Lo script è lo stesso consigliato da WooThemes.
      Temo che tu abbia un problema di altra natura, tipo di compatibilità con tema o plugin, o con altre funzioni.

      rob

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.