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

ATTENZIONE: questo articolo è stato scritto oltre un anno fa, ed i contenuti potrebbero non essere più validi o compatibili. Sei pregato di tenerne conto, e se hai informazioni in merito di segnalarmele, grazie.

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.

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

Tags: , , , , , ,

27 Risposte a “WooCommerce: come impostare un ordine minimo e/o massimo (aggiornamento)”

  1. weblogginglecce 9 Lug 2014 at 10:50 #

    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

    • Roberto Rota 9 Lug 2014 at 11:39 #

      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

  2. Admir 8 Set 2014 at 15:12 #

    GRAZIE mille!! Spiegazione semplice e il codice fa il suo dovere!! Grazie

  3. Cristian 24 Nov 2014 at 17:46 #

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

    • Roberto Rota 24 Nov 2014 at 18:07 #

      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

  4. Luca 21 Dic 2014 at 17:31 #

    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

    • Roberto Rota 21 Dic 2014 at 19:27 #

      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

      • Luca 21 Dic 2014 at 20:21 #

        Grazie per la risposta !
        Non sono molto esperto di php.. mi sapresti dare una mano ? :/

        • Roberto Rota 22 Dic 2014 at 12:21 #

          Ciao Luca, appena ho un attimo di tregua vedo se riesco a buttar giù qualcosa.

          rob

          • emiliano 15 Mag 2015 at 15:05 #

            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

            • Roberto Rota 15 Mag 2015 at 19:33 #

              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

  5. Giuseppe 28 Lug 2015 at 20:17 #

    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 🙂

  6. Rocco 18 Nov 2015 at 00:44 #

    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!

    • Roberto Rota 18 Nov 2015 at 00:47 #

      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

      • rocco 19 Nov 2015 at 14:05 #

        Io credo di averlo inserito come da istruzioni 🙂
        Non so cosa altro fare

        • Roberto Rota 19 Nov 2015 at 14:57 #

          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

  7. Giuliana 4 Apr 2016 at 16:11 #

    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

    • Roberto Rota 4 Apr 2016 at 16:53 #

      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' ); } }

      • Giuliana 5 Apr 2016 at 00:15 #

        Grazie mille Roberto, funziona alla perfezione! Grande!!! 🙂

  8. Luca Lovino 3 Giu 2016 at 16:27 #

    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

    • Roberto Rota 3 Giu 2016 at 16:57 #

      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

  9. kratossylar 2 Set 2016 at 13:39 #

    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

    • Roberto Rota 6 Set 2016 at 12:05 #

      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

  10. Tony 29 Ago 2017 at 18:57 #

    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

    • Roberto Rota 30 Ago 2017 at 09:34 #

      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

Dubbi o suggerimenti? Lascia un commento!

I love Instagram