Come impostare la spedizione gratuita automatica su WooCommerce

Spedizione gratuita automatica su WooCommerce

Questo articolo è stato aggiornato in data

Sei alla ricerca di un metodo per impostare la spedizione gratuita automatica su WooCommerce? Allora sei nel posto giusto. Un aspetto importante nella gestione di un negozio e-commerce è proprio quello relativo alle spedizioni.

Un cliente che arriva sul nostro sito, e soprattutto che giunge al checkout, deve avere subito un’idea chiara dei costi totali dell’operazione compresi quelli relativi alla spedizione.

Sei in cerca di una live chat per il tuo sito web? Chatra è uno dei migliori programmi di live chat in circolazione, dai un'occhiata.

Spedizione gratuita su WooCommerce

WooCommerce ha una gestione abbastanza basilare delle spedizioni, ma permette di aggiungere la spedizione gratuita in base a diversi fattori. Per gestire le spedizioni dobbiamo raggiungere la pagina disponibile sotto la voce “WooCommerce – Impostazioni – Spedizione“.

In questa pagina potremo andare a configurare le varie “zone” coperte, ovvero i costi divisi per paesi, ed inserire anche una spedizione per quelle non coperte. Quindi potremo specificare dei costi per alcune zone ed inserire altri generici per tutte le altre, o semplicemente inserire la spedizione gratuita.

Impostare spedizione gratuita WooCommerce
Impostare spedizione gratuita WooCommerce

Impostiamo, ad esempio, le spedizioni disponibili per l’Italia andando a cliccare su “Aggiungi zona di spedizione“. Successivamente compiliamo il form con nome zona: Italia, regione della zona: Italia. A questo punto siamo pronti per creare le nostre spedizioni in “Aggiungi metodo di spedizione“, tra cui quella gratuita.

Quando configuriamo la spedizione gratuita in WooCommerce, ad esempio sopra una determinata soglia nel carrello, avremo nel checkout tutte le opzioni di spedizione disponibili, lasciando al cliente la scelta.

Questo non è propriamente consigliato in quanto, oltre ad un problema estetico, viene meno la chiarezza dei costi andando a confondere i clienti.

Spedizione gratuita automatica su WooCommerce

La soluzione, per semplificare il passaggio nel checkout, sta nel rendere la spedizione gratuita automatica su WooCommerce, andando ad eliminare tutte le restanti spedizioni qualora vengano soddisfatti i requisiti di quella gratuita.

Con una soluzione di questo genere, i nostri clienti non si troveranno più davanti molteplici spedizioni e non avranno dubbi sul prosieguo dell’operazione. Purtroppo di default WooCommerce non permette di fare ciò, quindi andiamo a vedere come ovviare al problema.

Utilizzo di un Child Theme

Uno dei metodi per impostare una spedizione gratuita automatica su WooCommerce è attraverso l’utilizzo di un Child Theme. Utilizzando il file functions.php del tema Child potremo infatti aggiungere uno snippet che esclude altre spedizioni quando quella gratuita è soddisfatta.

Di seguito il codice da incollare all’interno del vostro functions.php:

function wpspecial_spedizione_gratuita_automatica( $rates, $package ) {
$all_free_rates = array();
foreach ( $rates as $rate_id => $rate ) {
      if ( 'free_shipping' === $rate->method_id ) {
         $all_free_rates[ $rate_id ] = $rate;
         break;
      }
}
if ( empty( $all_free_rates )) {
        return $rates;
} else {
        return $all_free_rates;
} 

}
add_filter( 'woocommerce_package_rates', 'wpspecial_spedizione_gratuita_automatica', 10, 2 );

Una volta inserito questo codice potrebbe non essere visibile immediatamente il risultato, quindi seguiamo il percorso nel menu “WooCommerce – Impostazioni – Stato – Strumenti“, e cerchiamo “Elimina sessioni dei cliente” e confermiamo con svuota.

Spedizione gratuita su WooCommerce - Prima/Dopo
Spedizione gratuita su WooCommerce – Prima/Dopo

Il risultato è semplificare la visualizzazione delle spedizioni per il cliente. Ovviamente, la grafica è solo di esempio in quanto cambia in base al template utilizzato.

Spedizione gratuita automatica e ritiro in sede

Potrebbe essere necessario non eliminare una specifica spedizione quando vengono soddisfatti i requisiti di quella gratuita. Pensiamo, ad esempio, quando intendiamo offrire il servizio di ritiro in sede per i nostri prodotti.

In questo caso la procedura richiederà uno snippet diverso, ed inoltre dovremo conoscere gli ID delle spedizioni create. Per scoprire gli ID della spedizione, raggiungiamo il menu “Zone di Spedizione – Italia” e controlliamo i metodi di spedizione.

Come conoscere ID spedizione WooCommerce
Come conoscere ID spedizione WooCommerce

Passando il mouse sopra i metodi di spedizione, in basso a sinistra, comparirà un link con alla fine l’ID di quella spedizione. Bene, memorizziamo quello della spedizione gratuita e quello della tariffa unica.

Lo snippet per utilizzare la spedizione gratuita automatica su WooCommerce e lasciare attivo il ritiro in sede è il seguente:

function wpspecial_spedizione_gratuita_automatica( $rates, $package ) {
if ( isset( $rates['free_shipping:1'] ) ) {
     unset( $rates['flat_rate:2'] );
}     
return $rates;
}
add_filter( 'woocommerce_package_rates', 'wpspecial_spedizione_gratuita_automatica', 10, 2 );

Ovviamente questo è un codice di esempio e alla voce “free_shipping:” dovremo modificare il numero 1 con quello del nostro ID spedizione gratuita, mentre alla voce “flat_rate:“, l’ID 2 dovrà essere quello della nostra tariffa unica.

Personalizza il carrello di WooCommerce

Qualora abbiate impostato una spedizione gratuita in base al valore del carrello, potremo aggiungere una funzione che indichi la somma restante per l’utilizzo della stessa. Questo, oltre a migliorare l’esperienza utente, invoglierà i clienti ad acquistare più oggetti sull’ e-commerce.

Utilizzando sempre il file functions.php del nostro Child Theme andiamo ad inserire il codice qui presente:

function wpspecial_qntmanca_spedizione_gratuita() {
   $min_amount = 49; 
   $current = WC()->cart->subtotal;
   if ( $current < $min_amount ) {
      $added_text = 'Ottieni la spedizione gratuita se ordini ' . wc_price( $min_amount - $current ) . ' in più!';
      $return_to = wc_get_page_permalink( 'shop' );
      $notice = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), 'Continua lo Shopping', $added_text );
      wc_print_notice( $notice, 'notice' );
   }
  
}
add_action( 'woocommerce_before_cart', 'wpspecial_qntmanca_spedizione_gratuita' );

Il dato da modificare in base alle vostre esigenze è $min_amount = 49;. Questo dato equivale al valore della spedizione gratuita, ovvero 49€.

Esempio importo restante per la spedizione gratuita
Esempio importo restante per la spedizione gratuita

Utilizzo di un plugin di code snippet

Se non stiamo utilizzando un Child Theme ma vogliamo comunque importare la modifica, l’unica soluzione da adottare è l’installazione di un plugin. Infatti, non è consigliato modificare il tema principale in quanto basterebbe un aggiornamento per perdere tutte le modifiche effettuate.

Uno dei tanti plugin che permettono di aggiungere codice è Code Snippets. Una volta installato ed attivato il plugin (guida per installare un plugin), troverai nel menu di WordPress la relativa voce.

Spedizione gratuita automatica su WooCommerce attraverso Code Snippets
Spedizione gratuita automatica su WooCommerce attraverso Code Snippets

Andiamo quindi su “Snippets – Aggiungi Nuovo“, diamo il nome al frammento di codice, ad esempio “Spedizione gratuita automatica” ed incolliamo il codice PHP proposto precedentemente.

Ricordiamoci di flaggare “Attiva solo nell’area pubblica“. Il risultato sarà il medesimo ottenuto con il Child Theme.

Conclusioni

In questa guida, abbiamo visto come rendere automatica la spedizione gratuita negli ordini di WooCommerce tramite l’inserimento di uno snippet all’interno del nostro sito web.

Hai inserito il codice sul tuo sito? Lo hai trovato difficile o hai riscontrato dei problemi? Raccontaci la tua esperienza nei commenti.

I backup sono essenziali per ogni sito web. Non farti trovare impreparato nel momento del bisogno, usa UpdraftPlus per i backup del tuo sito web!

Piaciuto l'articolo? Condividilo sui social!

29 commenti su “Come impostare la spedizione gratuita automatica su WooCommerce

  1. Grazie per la tua chiara esposizione. Ho provato la soluzione con child-theme alla lettera, ma non funziona…. Peccato.

    1. Ciao Antonio abbiamo appena effettuato un test sullo snippet ed a noi funziona. Hai impostato correttamente i due metodi di spedizione, gratuita ed a pagamento, inserendo in quella gratuita una regola tipo di soglia minima?

  2. ciao io ho seguito la procedura con l’aggiunta del plugin e funziona però volevo sapere nel caso in cui si voglia mantenere alla spedizione gratuita anche il ritiro in sede

    1. Ciao Saba, grazie per il tuo commento, abbiamo colto l’occasione per aggiornare l’articolo ed inserire uno snippet che permette di mantenere il ritiro in sede.

  3. Ciao, ho apportato le modifiche con l’aggiunta del plugin Code Snippets, funziona. Nel caso in cui avessi più tipologie di spedizione, ovvero volessi aggiungere un secondo id – … unset( $rates[‘flat_rate:xy’] );…. come procedo?

    1. Ciao Francesco, ti basterà aggiungere più righe ‘unset( $rates[‘flat_rate:2′] );’ con l’ID delle spedizioni da eliminare.

  4. Ciao, ho copiato il tuo snippet nel function.php del child per vedere il RITIRO IN SEDE anche con SPEDIZIONE GRATUITA, ma purtroppo non me lo fa vedere (ho anche eliminato le sessioni del cliente).
    PS ho due tipi di tariffa unica ma ho duplicato la riga e inserito l’ID. Come potrei fare quindi?

    1. Ciao Simona, bisogna controllare bene il codice da te utilizzato nel child. Ti rimando alla pagina di assistenza qualora ne avessi bisogno. Per mantenere il ritiro in sede non devi inserire il suo ID nella riga unset. Quella serve appunto per eliminare la spedizione qualora quella gratuita sia verificata.

    1. Ciao Alessandra, ti basta utilizzare lo snippet presente nel paragrafo “Spedizione gratuita automatica e ritiro in sede”. Ricorda che nella riga “unset” dovrai inserire l’ID della spedizione da eliminare. Il ritiro in sede sarà sempre visibile e dovrai solo impostarlo come gratuito nelle impostazioni di WooCommerce.

  5. Ciao,
    volevo ringraziarti per l’articolo e i codici inseriti.
    Funzionano perfettamente! 😉

  6. Ciao, ti volevo dire che una volta implementato il codice funziona. Grazie mille.
    Abbiamo risolto questo problema nel nostro ecommerce, così ora è chiaro a tutti i clienti che superata una certa soglia si ha la spedizione gratuita e non devono flaggare nulla.
    Grazie e buon lavoro

  7. Ciao, grazie per la guida. Sono riuscito ad inserire il codice per la spedizione gratuita, ma quando ho provato ad inserire quello per l’avviso della soglia da raggiungere per ottenerla, le modifiche al php non vengono registrate per un errore di sinstassi:
    “syntax error, unexpected ‘$current’ (T_VARIABLE)”

    1. Ciao Domenico,
      controlla che il codice sia stato copiato correttamente, forse durante la modifica hai inavvertitamente rimosso qualche punto e virgola (;)

  8. Salve, Ad esempio imposto una spedizione gratuita che soddisfa le mie condizioni. Inserisco nel carrello il prodotto con spedizione gratuita e va tutto bene. Invece se nel carrello ci sono due prodotti, uno con spedizione gratuita e l’ altro con spedizione normale. Il carrello mi calcola spedizione normali, nel senso che essendo alla base impostato le spedizione a peso, mi calcolca le spese dei due prodotti come totale come peso invece dovrebbe calcolarmi solo il peso del prodotto che non ha la spedizione gratuita. C?è un errore da qulche parte o di base woocommerce non lo permette?

  9. Ciao, ho provato facendo le opportune modifiche al tuo file ma non riesco a farlo funzionare. Ho anche elimitato le sessioni cliente. Ti incollo qui il file completo che ho utilizzato, puoi dare un’occhiata se ho sbagliato qualcosa? La free shipping è ID 9 e flat rate 2:

    function boodo_wp_spedizione_gratuita_automatica( $rates, $package ) {
    if ( isset( $rates[‘free_shipping:9’] ) ) {
    unset( $rates[‘flat_rate:2’] );
    }
    return $rates;
    }
    add_filter( ‘woocommerce_package_rates’, ‘boodo_wp_spedizione_gratuita_automatica’, 10, 2 );

    function boodo_wp_qntmanca_spedizione_gratuita() {
    $min_amount = 100;
    $current = WC()->cart->subtotal;
    if ( $current < $min_amount ) {
    $added_text = 'Ottieni la spedizione gratuita se ordini ' . wc_price( $min_amount – $current ) . ' in più!';
    $return_to = wc_get_page_permalink( 'shop' );
    $notice = sprintf( '%s %s’, esc_url( $return_to ), ‘Continua lo Shopping’, $added_text );
    wc_print_notice( $notice, ‘notice’ );
    }

    }
    add_action( ‘woocommerce_before_cart’, ‘boodo_wp_qntmanca_spedizione_gratuita’ );
    E’ la prima volta che faccio modifiche nel child, forse il mio problema è li?
    Grazie
    Andrea

  10. Complimenti.
    Molto chiara la tua esposizione. Intervengo sempre sul tema child e a questo proposito volevo chiederti: gestisco delle zone di spedizione e sono riuscito ad impostare il tutto correttamente. Ma proprio perchè gestisco diverse zone di spedizione, se comprano nel mio comune o nei comuni limitrofi, cambia la cifra oltre la quale la spedizione è gratuita. Ad esempio: per il mio comune ho 40 euro di spesa minima e per gli altri 80. Come faccio a gestire l’avviso che mancano XXXX euro per avere la spedizione gratuita? Secondo te è fattibile?
    Grazie

  11. Salve, tutto descritto in modo molto chiaro, grazie del supporto.
    Il mio cliente desidera diverse opzioni:
    – ordine minimo euro 30
    – ritiro in sede gratuito
    – spese di spedizioni gratuite sopra i 150 euro di spesa
    – spese di spedizioni “standard” calcolate in questo modo: 10% del carrello + contributo di euro 8 fisso

    aiuto!

    1. Ciao Enrico, grazie mille per il tuo commento! Le opzioni da te descritte sono sicuramente possibili, ma temo che sia un lavoro personalizzato. Se desideri ricevere un preventivo, non esitare a contattarci tramite la pagina di supporto. Il nostro team sarà felice di aiutarti!

  12. ciao, c’è qualche problema con l’installazione del plug in? ho ricevuto una mail da wordpress per un problema tecnico, mi hanno inserito un link e mi riportano allo snippet creato per l’importo rimanente della spedizione gratuita.
    io l’unica variazione che ho fatto è inserito total al posto di subtotal in quanto mi prendeva l’import prima del codice sconto eventualmente inserito.

    1. Ciao Rino,
      bisognerebbe vedere di preciso a cosa si riferisce il problema tecnico. Di solito viene specificato il tipo di problema nella mail che WordPress invia automaticamente quando c’è un errore.

  13. Buongiorno,
    Ho installato entrambi gli snippet come dalle procedure che avete riportato e funzionano perfettamente. Ora ho l’esigenza di escludere alcuni prodotti dalla spedizione gratuita automatica che codice posso usare?
    Grazie in anticipo per la risposta

    1. Ciao Antonio, grazie mille per il tuo commento! Essendo una modifica particolare ti invitiamo a contattare la pagina di supporto. Il nostro team sarà felice di aiutarti!

I commenti sono chiusi.

Hey, aspetta!!!

Riceverai news e promozioni da parte di WP Special sul mondo WordPress. Niente spam, solo un paio di email al mese.

x