Come impostare un ordine minimo di acquisto in WooCommerce

ordine minimo woocommerce

WooCommerce, nonostante la sua facilità di utilizzo, a volte non soddisfa tutte le nostre esigenze o quelle dei nostri clienti.

Ad esempio, se si vuole inserire un ordine minimo di acquisto, non c’è una soluzione già integrata all’interno delle impostazioni del plugin. Come sempre, esistono vari modi per aggiungere nuove funzionalità a WordPress, ma spesso bisogna ricorrere ad altri plugin, oppure scrivere del codice PHP.

In questo articolo ti darò dei suggerimenti per raggiungere il risultato desiderato percorrendo entrambe le strade.

1. Soluzione senza plugin: modificare opportunamente il file functions.php

Il codice che sto per indicarti può essere inserito in due modi: all’interno di un plugin oppure dentro il file functions.php del tema.

Se le modifiche che devi effettuare sono solo queste, non ha senso creare un plugin ad hoc contenente queste poche righe di codice. Il mio suggerimento, quindi, è quello di fare ricorso al file functions.php, che puoi trovare all’interno della cartella principale del tema che stai utilizzando.

Ma attenzione!

In generale, per qualsiasi modifica sul codice di WordPress, sarebbe sempre meglio installare un Child Theme in una nuova cartella e creare un file functions.php ex novo.

Questo perché, quando vai a modificare direttamente i file della cartella principale del tuo tema, ad ogni futuro aggiornamento del tema perderai tutte le tue modifiche e personalizzazioni, dovendo rifare tutto da capo.

Al contrario, se lavori dentro il Child Theme, non avrai bisogno di rifare niente e tutto il tuo prezioso lavoro verrà conservato.

Se vuoi cominciare subito con il piede giusto e fare uso dei Child Theme, scarica subito questo mini-ebook gratuito.

2. Inserimento del codice PHP per inserire l’ordine minimo

Una volta aperto il file functions.php del tuo tema principale (o quello del Child Theme), il codice che dovrai inserire è il seguente:

add_action( 'woocommerce_checkout_process', 'blogwp_minimum_order' );
add_action( 'woocommerce_before_cart' , 'blogwp_minimum_order' );
 
function blogwp_minimum_order() {
    // Inseriamo il minimo ordine all'interno di una variabile, senza indicare la valuta
    $minimum = 15;

    if ( WC()->cart->total < $minimum ) { if( is_cart() ) { wc_print_notice( sprintf( 'È richiesto un ordine minimo di %s per concludere l'ordine. Il totale del tuo ordine attualmente è %s.' , wc_price( $minimum ), wc_price( WC()->cart->total )
                    ), 'error' 
             );

        } else {

         wc_add_notice( 
             sprintf( 'È richiesto un ordine minimo di %s per concludere l'ordine. Il totale del tuo ordine attualmente è %s.' , 
                      wc_price( $minimum ), 
                      wc_price( WC()->cart->total )
                    ), 'error' 
             );
       } // chiusura else
    } // chiusura del primo if
} // chiusura della funzione

Dove:

  • la variabile $minimum serve a decidere qual’è il prezzo minimo che deve essere raggiunto dall’utente per poter portare a termine l’ordine di acquisto
  • la funzione wc_price(), tra le altre cose, inserisce la valuta che è stata selezionata all’interno delle impostazioni di WooCommerce.

Inserendo queste poche righe di codice vedrai subito che, nella pagina carrello, verrà visualizzato un messaggio di errore finché il totale dell’ordine rimarrà inferiore all’importo da te indicato nella variabile $minimum (in questo caso 15,00 €). Inoltre, l’utente che non raggiungerà l’importo minimo non avrà nessuna possibilità di concludere gli ordini.

3. Miglioriamo la user experience inserendo un messaggio per l’utente

Come abbiamo appena detto, la procedura esposta fino ad ora permette di visualizzare un messaggio d’errore all’interno della pagina CARRELLO del sito, come nella figura seguente:

blogwp minimo ordine woocommerce carrello

Messaggio d’errore all’interno della pagina CARRELLO – tema “Storefront”

Questo è già un buon punto di partenza, ma cosa succede se l’utente va direttamente nella pagina CHECKOUT (CASSA) senza passare per il carrello (cosa altamente probabile nella maggior parte dei Temi compatibili con WooCommerce)?

Ecco cosa vedrà:

blogwp ordine minimo woocommerce checkout

Assenza di alcun messaggio d’errore all’interno della pagina CHECKOUT – tema “Storefront”

Per accorgersi quindi del limite dato dall’ordine minimo, l’utente dovrà prima riempire tutti i dati, e poi cliccare su “Effettua Ordine”.

Solo dopo aver cliccato sul bottone, infatti, comparirà un messaggio d’errore.

Per evitare questo piccolo inconveniente, è possibile aggiungere un altro hook tra quelli già inseriti, e fare in modo che il messaggio d’errore compaia subito anche in questa pagina.

Il codice da inserire, insieme agli altri hook, è il seguente:

add_action ('woocommerce_before_checkout_form', 'blogwp_minimum_order');

Il risultato sarà qualcosa di questo tipo:

blogwp woocommerce ordine minimo checkout

Messaggio d’errore all’interno della pagina CHECKOUT – tema “Storefront”

4. Non vuoi scrivere neanche una riga di codice? Ecco i migliori plugin.

Esistono vari plugin gratuiti, scaricabili direttamente dal sito ufficiale di WordPress (wordpress.org) ma, tra questi, quelli che prenderei in considerazione sono solo quelli con il maggior numero di installazioni attive, ovvero:

Minimum Order Amount for Woocommerce

Minimum Purchase for WooCommerce

Cliccando su questo link, invece, potrai trovare una lista dei plugin a pagamento acquistabili sul marketplace di Envato.

Sharing is caring :)

Se ti è piaciuto questo articolo, ti invito a mettere un like sulla mia pagina facebook oppure condividerlo sui social. Se invece hai qualche problema con la procedura appena descritta, lascia un commento oppure contattami attraverso questo contact form.

20 commenti
    • Massimiliano
      Massimiliano dice:

      Ciao Debora,

      Mi fa molto piacere che questo articolo ti sia stato utile.

      Ti ricordo che se vuoi puoi mettere un like sulla pagina facebook di BLOGWP.IT per rimanere aggiornata in merito ai prossimi articoli del blog e per scrivermi direttamente in chat.

      Massimiliano

      Rispondi
      • Anthony

        Ciao Massimo, ho provato ad inserire i codici. Il primo (minimo ordine sul carrello) funziona. Il secondo, l’hook per il minimo d’ordine in cassa invece non va.
        Inoltre, colgo l’occasione per chiederti una cosa:
        Mediante codice o plug-in è possibile impostare dei minimi d’ordine per numero prodotti e non per euro (è necessario per rispettare le condizioni di imballo)
        Tipo scaglioni a 3 / 5 / 10 prodotti?
        Attendo tue e ringrazio anticipatamente,
        Anthony

      • Massimiliano De Stefano
        Massimiliano De Stefano dice:

        Ciao Anthony,

        Che tema stai usando? Che comportamento ha il sito? Puoi mettere il link qui sotto così gli diamo un’occhiata e vediamo cosa succede dopo che hai inserito il codice?

        Il primo plugin parla solo di prezzi, mentre il secondo parla di configurazione di regole in generale, anche in base alla quantità, e sembra descrivere qualcosa di simile a quello che serve a te. Ti suggerisco di leggerti bene la documentazione e poi provarlo su un sito ancora non in produzione, per vedere se effettivamente fa quello che ti aspetti. Oppure prova a scrivere al supporto tecnico del plugin, tramite il portale di WordPress (ti basterà cliccare su “support” nella pagina del plugin stesso).

        In ogni caso, i due plugin che ho indicato nell’articolo sono degli esempi, sono sicuro che ne esistano tanti altri e che con una ricerca su Google potrai trovare quello che fa al caso tuo.

        Attendo il link del tuo sito così controlliamo cosa c’è che non va!

        Ciao,
        Massimiliano

  1. Stefano

    Salve Massimiliano grazie per la dritta. Però quando vado ad aggiungere il codice nel mio file functions.php del tema child di hello Elementor mi restituisce questo errore “syntax error, unexpected end of file” all’ultima riga che contiene la chiusura “?>”. Grazie

    Rispondi
    • Massimiliano De Stefano
      Massimiliano De Stefano dice:

      Ciao Stefano,

      Quando accade questo, normalmente è un problema dovuto a qualche errore di sintassi.

      Dovrei vedere nello specifico il codice che hai scritto e dove lo hai inserito per poterti aiutare.

      Se vuoi approfondire scrivimi pure usando il contact form nella pagina contatti.

      Ciao,
      Massimiliano

      Rispondi
  2. Filippo

    Ciao Massimiliano,
    mi sono accorto che dopo aver cambiato tema, il secondo hook mi appare per pochissimi secondi e poi scompare. Potresti darmi una mano?
    Grazie

    Rispondi
    • Massimiliano De Stefano
      Massimiliano De Stefano dice:

      Ciao Filippo,

      Hai risolto oppure sul sito si verifica ancora il comportamento anomalo?

      Se hai bisogno ancora di una mano, ti aiuto volentieri. Mandami una richiesta attraverso il contact form, in cui mi spieghi un po’ più in dettaglio la situazione (che tema avevi prima, qual’è il nuovo tema, il link alla pagina carrello e checkout ecc.) così ci organizziamo con una consulenza specifica e un intervento programmato.

      Saluti,
      Massimiliano

      Rispondi
  3. Luca

    Ciao Massimiliano,
    complimenti per il tuo articolo.

    Ho una domanda: sapresti dirmi se è possibile impostare l’ordine minimo escluse le spese?
    Ho utilizzato il tuo codice e funziona correttamente, però quando l’utente aggiunge al carrello Woocommerce calcola il prezzo minimo totale comprensivo di spese di spedizione e quindi “falsa” il costo minimo per fare l’ordine. Ho guardato anche alcuni plugin ma non ho trovato nulla che risponda alla mia richiesta. Sapresti aiutarmi? Grazie mille!

    Rispondi
    • Massimiliano De Stefano
      Massimiliano De Stefano dice:

      Ciao Luca,

      Sono molto contento che il mio articolo ti piaccia e che ti sia stato utile!

      La “variabile” che ti restituisce il valore del carrello è “WC()->cart->total”.

      Dovresti fare un po’ di test con il codice e sostituire quella funzione con la funzione che ti dà il totale senza le spese di spedizione.

      Forse il template tag che serve nel tuo caso è “WC()->cart->get_subtotal()”.

      Prova a vedere in questo articolo:
      https://stackoverflow.com/questions/37664203/subtotal-cart-variable-php-woocommerce
      Oppure potresti sottrarre a “WC()->cart->total” le spese di spedizione, con il template tag “WC()->cart->get_cart_shipping_total()”.
      Questa funzione invece è menzionata qui:
      https://stackoverflow.com/questions/56847532/show-shipping-costs-woocommerce
      Fammi sapere se risolvi, così miglioriamo l’articolo e siamo di aiuto anche ad altri che potrebbero avere la tua stessa esigenza! ;-)

      Ciao,
      Massimiliano

      Rispondi
  4. Giacomo

    Ciao Massimiliano anche io ho lo stesso problema di Luca. Ho provato a cambiare le funzioni ma mi da errore ripetutamente. Avete trovato una soluzione al problema per escludere il valore del carrello dal calcolo?
    Grazie!!!

    Rispondi
    • Massimiliano De Stefano
      Massimiliano De Stefano dice:

      Ciao Giacomo,

      Intendi togliere il valore delle spedizioni dal calcolo? Se si, questa particolare casistica che è necessaria a te e Luca, nello specifico, richiede uno studio dettagliato ed una serie di test. Luca non mi ha risposto, non so se ha risolto.

      Se hai bisogno di un intervento professionale programmato, specifico per il tuo caso, possiamo organizzarci. Contattami tranquillamente tramite contact form indicandomi tutti i dettagli e ti posso far sapere eventuali costi e tempi.

      Se Luca dovesse rispondermi con la soluzione che ha trovato, lo indicherò senz’altro nell’articolo in modo che possiate usufruirne tutti!

      Buona serata,
      Massimiliano

      Rispondi
  5. Andrea

    Ciao Massimiliano,
    interessante il tuo articolo.
    Come ho letto su altri commenti dovrei inserire un numero minimo di pezzi (p.e. vino minimo 6pz).
    Come vado a sotituire nel .php l’importo minimo con un munero minimo di pezzi?

    Grazie per una risposta appena puoi
    Andrea

    Rispondi
    • Massimiliano De Stefano
      Massimiliano De Stefano dice:

      Ciao Andrea,

      Mi fa piacere che trovi il mio articolo interessante e utile! :)

      Come avrai visto anche nella mia risposta, c’è il secondo plugin che indico nell’articolo che dovrebbe soddisfare la vostra richiesta (Minimum Purchase for WooCommerce). Non l’ho testato, ho letto velocemente la documentazione, e mi sembra un buon candidato a svolgere la funzione che ti serve.

      Se invece non vuoi appesantire il tuo sito aggiungendo un plugin per una funzionalità così minima, e vuoi una soluzione pronta per l’uso (solo da copiare e incollare sul tuo file .php), per farlo devo fare un po’ di ricerca, dei test e poi fornirti la soluzione più adatta al tuo caso.

      Scrivimi una richiesta dettagliata sulla pagina contatti, indicandomi anche il link al tuo sito, e ti faccio un piccolo studio di fattibilità e una quotazione per risolvere la tua esigenza specifica.

      Ciao,
      Massimiliano

      Rispondi
  6. Alessio

    Ciao Massimiliano,

    Sarebbe possibile applicare il codice ad un solo prodotto?

    Nel senso che per un determinato prodotto avrei bisogno che la quantità minima sia di 50 pezzi (poichè la scatola ne contiene 50 pezzi), ma ciò non deve essere applicato anche agli altri prodotti in vendita.
    Quindi il check dovrebbe essere fatto nella pagina prodotto e non durante il checkout.

    Grazie per le eventuali risposte
    Alessio

    Rispondi
    • Massimiliano De Stefano
      Massimiliano De Stefano dice:

      Ciao Alessio,

      Ancora non mi è capitato questo caso specifico, quindi non ho una soluzione rapida da condividere qui. Immagino che con dei di test e scrivendo codice specifico per questa esigenza si possa fare.

      Traendo spunto da quello che ho scritto qui e applicando una logica simile, se hai un po’ di competenze PHP, dovresti riuscire agevolmente a trovare una soluzione e, se riesci a farlo effettivamente, nello spirito di ciò che mi ha spinto ad aprire questo blog, ti chiedo gentilmente di condividere i risultati.

      Se non hai competenze di programmazione e non hai un developer di fiducia, possiamo organizzarci e ti posso fornire io una consulenza specifica per il tuo caso. Se vuoi procedere così, scrivimi attraverso il contact form presente nella pagina contatti.

      Ciao, buon lavoro!
      Massimiliano

      Rispondi
  7. Massimiliano
    Massimiliano dice:

    Buongiorno Massimiliano, gran bell’articolo.
    Una domanda: ma se io volessi spedire con un minimo di ordine in base alla zona di spedizione, come potrei fare?
    Grazie.

    Rispondi
    • Massimiliano De Stefano
      Massimiliano De Stefano dice:

      Ciao Massimiliano, sono molto contento che l’articolo ti sia piaciuto!

      Tra l’altro mi sa che in qualche modo mi sono imbattuto nel tuo sito web (ho riconosciuto il logo che mi appare qui associato alla tua email, nell’avatar di WP) perché stavo cercando un po’ di informazioni su e-commerce di vini e penso di essermi imbattuto in uno dei siti dei tuoi clienti. Complimenti.

      Per rispondere alla tua domanda e darti un suggerimento su come procedere: potresti verificare nel codice php e tra le funzioni php predefinite di WordPress (i “template tags”) se c’è qualcosa che ti restituisca la zona di spedizione (molto probabilmente esiste) e aggiungere una condizione nell’IF.

      Se hai budget, ti serve per qualche tuo cliente e non ti va di farlo tu o per qualsiasi altro motivo vuoi fare una collaborazione scrivimi attraverso il form di contatto, che vediamo se ti posso fare io una consulenza mirata per questa tua specifica esigenza.

      Ciao, buona giornata!
      Massimiliano

      Rispondi
  8. Alberto

    Ciao Massimiliano, grazie per le info che hai condiviso in questo post, ho integrato lo snippet nel mio tema child e funziona, però ho constatato che al calcolo del prezzo minimo impostato concorrono anche le spese di spedizione (es. se spesa minima impostata 50€ e vado al checkout con un prodotto da 40€ + 10€ di spese spedizione arrivo alla soglia di 50€).
    Come posso impostare il calcolo della soglia massima di spesa considerando solo il prezzo dei prodotti, escludendo dal totale le spese di spedizione?

    Rispondi
    • Massimiliano De Stefano
      Massimiliano De Stefano dice:

      Ciao Alberto,

      Bene, sono molto contento che l’articolo ti sia stato utile! Al momento, purtroppo, data le molte richieste, non riesco a lavorare su soluzioni personalizzate qui nel blog. Se vuoi puoi scrivermi sulla pagina contatti per prenotare una chiamata e valutare insieme se serva una consulenza personalizzata, per poi avere tutto il tempo di trovare una soluzione alla tua esigenza specifica.

      Ciao,
      Massimiliano

      Rispondi

Lascia un Commento

Vuoi partecipare alla discussione?
Sentitevi liberi di contribuire!

Lascia un commento

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