WooCommerce: nascondere altre spedizioni quando è disponibile la spedizione gratuita

WooCommerce spedizione gratuita

Aggiornato per WooCommerce 2.6.x

La spedizione gratuita, magari al raggiungimento di un importo minimo, è un classico degli store ed è presente come possibilità anche in WooCommerce.

In alcuni store, dove le spese di spedizione sono semplici, può avere un senso nascondere le altre possibilità di spedizione quando è disponibile la spedizione gratuita, specie se al lato pratico non cambia nulla nei termini di spedizione.

In alcuni temi votati a WooCommerce questa opzione è prevista, ma il più delle volte, quando è disponibile la spedizione gratuita, rimangono selezionabili anche le altre possibilità di spedizione a pagamento, cosa che in qualche caso può confondere il cliente.

Con un semplice snippet, è possibile nascondere le altre spedizioni quando è disponibile la spedizione gratuita.

Nelle due immagini qui sotto, il carrello di WooCommerce, con il tema Storefront, con e senza snippet

Il codice qui sotto va copiato nel file delle funzioni del tema, il classico functions.php, con la solita raccomandazione di utilizzare un tema child.

Snippet per WooCommerce 2.6

Questo snippet funziona solo con WooCommerce versione 2.6 o superiori, per le versioni precedenti vedere sotto.

NOTA BENE:

  1. Lo snippet funziona solamente se se viene utilizzato il sistema di spedizioni introdotto con questa versione di WooCommerce. Se si utilizzano i precedenti metodi di spedizione, evidenziati con la scritta (legacy), lo script non funziona.
  2. Dopo aver inserito lo snippet nel file functions.php, è necessario andare in WooCommerce > Stato del Sistema > Strumenti e cancellare i dati transitori di WooCommerce (Clear WC Trasients per i sistemi in inglese)
/**
 * Hide shipping rates when free shipping is available.
 * Updated to support WooCommerce 2.6 Shipping Zones.
 *
 * @param array $rates Array of rates found for the package.
 * @return array
 */
function my_hide_shipping_when_free_is_available( $rates ) {
	$free = array();
	foreach ( $rates as $rate_id => $rate ) {
		if ( 'free_shipping' === $rate->method_id ) {
			$free[ $rate_id ] = $rate;
			break;
		}
	}
	return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

Snippet per WooCommerce da 2.1 a 2.5

/**
 * woocommerce_package_rates is a 2.1+ hook
 */
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
 
/**
 * Hide shipping rates when free shipping is available
 *
 * @param array $rates Array of rates found for the package
 * @param array $package The package array/object being shipped
 * @return array of modified rates
 */
function hide_shipping_when_free_is_available( $rates, $package ) {
 	
 	// Only modify rates if free_shipping is present
  	if ( isset( $rates['free_shipping'] ) ) {
  	
  		// To unset a single rate/method, do the following. This example unsets flat_rate shipping
  		unset( $rates['flat_rate'] );
  		
  		// To unset all methods except for free_shipping, do the following
  		$free_shipping          = $rates['free_shipping'];
  		$rates                  = array();
  		$rates['free_shipping'] = $free_shipping;
	}
	
	return $rates;
}

(Fonte: documentazione WooCommerce)

Powered by Pizza & Birra!

Questo blog è alimentato a pizza e birra.
Se ti ho risolto qualche problema, puoi ricambiare offrendomi una pizza e una birra, con una donazione tramite PayPal. Naturalmente brinderò alla tua salute!

PS: non ti scordare, iscriviti alla newsletter!

Tags: , , , , ,

49 Risposte a “WooCommerce: nascondere altre spedizioni quando è disponibile la spedizione gratuita”

  1. emiliano 7 Mar 2015 at 10:51 #

    Ciao Roberto,
    grazie delle utilissime info. Ti volevo chiedere però un consiglio.

    Avrei bisogno di utilizzare Woocommerce e integrare per le spedizioni il corriere GLS; nel senso che vorrei che quando per esempio un utente efettua un acquisto, automaticamente la spedizione venga processata da Gls. Esiste un plugin anche a pagamento che questo ? o che comunque è relativo a Gls?

    Grazie

    • Roberto Rota 7 Mar 2015 at 18:11 #

      Ciao Emiliano, personalmente non ho molta esperienza in questo settore.

      Da una veloce ricerca su google ho visto che ci sono parecchi plugin che in teoria interagiscono con GLS, tutto sta trovarne uno che sia aggiornato e che interagisca anche con le spedizioni di GLS in italia, che se non erro sono gestite dalle Poste.

      rob

  2. Alessandro Marengo 29 Mar 2015 at 12:36 #

    E’ stato testato anche da woo 2.3.6 in poi? A me non funziona e non ha mai funzionato prima. Che cosa può impedire la corretta applicazione di questo snippet? Non ho nessun altro plugin che intervenga sul costo delle spedizioni.

    • Roberto Rota 29 Mar 2015 at 16:02 #

      Ciao Alessandro, ti confermo che funziona regolarmente anche sull’ultima versione di WC, lo sto usando in un paio di installazioni con diversi temi, the retailer e flatsome, senza problemi.

      rob

      • alemarengo 30 Mar 2015 at 12:51 #

        Forse ci sono riuscito anche io, usavo una doppia dichiarazione nel functions.php 😉

  3. Rosario 7 Mag 2015 at 19:24 #

    Ciao Roberto come posso fare ad impostare su woocommerce non tutti ma alcuni prodotti in spedizione gratis e far apparire un fumetto “spedizione gratuita”?

  4. BB 13 Mag 2015 at 13:23 #

    Salve e grazie per il suo utilissimo codice. E’ possibile lasciare sempre ‘il ritiro in sede’ ? Grazie

    • Roberto Rota 13 Mag 2015 at 19:26 #

      Bella domanda, in effetti l’eventuale opzione “ritiro in sede” sparisce con questo snippet, magari con qualche modifica si riesce ad escluderla dall’effetto ma ci dovrei lavorare un po’.

      Se dovessi metterci le mani ti aggiorno.

      rob

  5. emiliano 22 Giu 2015 at 22:12 #

    Ciao Roberto,
    avrei bisogno di un aiuto.
    Nell’ecommerce che sto realizzando con woocommerce avrei la necessita di impostare una spedizione a 7 euro solo per certe categorie di prodotto.

    Tutte le spedizione sono gratuite ma solo per una categorie vorrei impostare una spedizione fissa 7 euro. io ho creato una classe di spedizione con costo 7 euro e l’ho aggiunta nel prodotto corrispondente.

    il problema e che mi aggiunge correttamente la spedizione a 7 euro, ma c’è anche la possibilita di scegliere la spedizione gratuita. Io vorrei che scomparisse in questi casi quella gratuita…

    mi sono spiegato bene ? grazie

    • Roberto Rota 24 Giu 2015 at 08:57 #

      Ciao Emiliano,
      non ho avuto modo di verificarli ancora, ma se fai una ricerca in rete puoi trovare diversi esempi di snippet che nascondono questo o quel metodo di spedizione in base a diversi fattori, dall’ID del prodotto alla categoria. Potrebbe essere la soluzione più semplice.

      Se riesco, visto che potrebbe tornarmi utile in futuro, appena ho un attimo magari cerco di fare una selezione e provarli, ma non ti prometto nulla che sono pieno di cose da fare in questi giorni…

      rob

      • emiliano 24 Giu 2015 at 09:04 #

        Grazie roberto.

        Diciamo che ho risolto in questo modo: Pero vorrei sapere solo se è un metodo che ha senso.

        Ho creato una classe di spedizione a 7 euro e una classe di spedizione a 0 euro.
        per tutte le categorie ho assegnato quella a 0 euro (che mi scrive di default gratis perche vede lo zero) e per l’altra categoria ho assegnato quella da 7 euro (cosi mi mantiene solo quella da 7). In questo modo funziona. Magari mi sono complicato troppo la vita 🙂

        Emiliano

        • Roberto Rota 24 Giu 2015 at 09:07 #

          Soluzione assolutamente onorevole, le classi di spedizione non vengono mai apprezzate abbastanza…
          Io per istinto vado subito a cercare altre strade, ma dovrei costringermi a valutarle più spesso 😉

          rob

          • emiliano 24 Giu 2015 at 09:12 #

            in effetti la soluzione piu facile è sempre sotto al naso 🙂
            Ti ringrazio ancora….

            Emiliano

  6. morganaeffect 21 Ago 2015 at 12:31 #

    Ciao Roberto, seguo sempre con interesse i tuoi articoli e le tue newsletter, però non ho ancora trovato un thread che risponda ad una mia problematica riguardo alle spese di spedizione gratuite.

    Avrei bisogno di rendere gratuita la spedizione ad una determinata categoria (e relative sottocategorie), solo al raggiungimento di un minimo di acquisto.

    Ho sperato che nella nuova release di woocommerce, nella tab spedizione gratuita, fosse implementata anche la scelta in base alla categoria o al brand, ma niente :-); d’altronde per la sua gratuità, woocommerce offre già moltissimo…

    In rete on riesco a trovare un plugin adatto, forse perchè non inserisco le parole di ricerca giuste :-(.

    Tu hai mai avuto modo di impostare questo tipo di calcolo delle spedizioni?

    Grazie!

    morganaeffect

    • Roberto Rota 22 Ago 2015 at 12:02 #

      Ciao Morgana, fino ad ora non mi è mai capitato di dover distinguere la spedizione gratuita in base alle categorie.

      Fattibile con un filtro, probabilmente, ma la domanda sorge spontanea: se in un ordine appaiono prodotti di più categorie, alcune con spedizione gratuita e altre no, che succede?

      rob

      • morganaeffect 22 Ago 2015 at 13:02 #

        Chi compie un ordine misto purtroppo paga le spese di spedizone. E’ una domanda che mi sono posta in effetti, ma non saprei come fare diversamente. I prodotti di un brand prevedono la spedizione gratuita oltre un certo limite, mentre gli altri prodotti del catalogo no.

        Amazon offre spesso spedizioni gratuite, ma solo quando spedisce personalmente, mentre per i prodotti inviati direttamente dai suoi affiliati si pagano le spese di consegna; mi è capitato infatti di dover pagare le spese di spedizione nonostante 1 prodotto avesse la spedizione gratuita.

        Ho pensato ad un codice coupon, ma la cosa diventa un pò intricata. In che modo posso usare i filtri?

        Grazie per la risposta superveloce 🙂

  7. Fulvio 31 Ago 2015 at 18:23 #

    articolo ben fatto ma mi domando perchè nascondere le spedizioni quando hai quella gratuita? nella mia esperienza mi è capitato più di una volta che le persone pagassero la spedizione, errore o no, perchè impedirglielo ? 😉

    • Roberto Rota 31 Ago 2015 at 19:50 #

      Caro Fulvio, è una questione di correttezza verso il cliente, per impedirgli di fare degli errori che, volendo, alla lunga possono avere ripercussioni sul buon nome e la reputazione dello store.

      Una voce negativa può creare danni anche seri…

      rob

      • Ciao Roberto, in verità tu dai un opzione sta a te sceglierla o meno, è un po’ come su Amazon la scelta o meno di pagamento con Prime o pagando la spedizione, se sei abbonato prime e la spedizione prevede la spedizione gratuita, tu comunque hai l’opzione di pagarti la spedizione, sta a te scegliere di non pagarla …

        Poi chiamiamola correttezza chiamiamola: lasciar libero arbitrio. E’ un modello che seguono in tanti grandi ecommerce

        • Roberto Rota 6 Set 2015 at 15:31 #

          Ciao Fulvio, sono d’accordo se la spedizione a pagamento offre dei vantaggi rispetto quella gratuita, tempi minori di consegna, o che altro.

          Ma se è sempre la stessa spedizione, con ad esempio il classico bonus “spedizione gratuita per acquisti superiori a tot”, credo sia corretto che la spedizione a pagamento debba sparire al momento opportuno.

          Se poi evidenzi graficamente bene questo aspetto, sono sicuro che ne ottieni buone impressioni dai clienti.

          rob

  8. Andrea 23 Set 2015 at 17:33 #

    Ciao Roberto,
    ottimo articolo, come gli altri del resto…

    Ho già avuto modo di inserire delle personalizzazioni nel file functions.php per modificare le funzionalità di woocommerce, ma non capisco per quale motivo questa funzione non viene calcolata, praticamente non funziona.

    Può esserci un motivo in particolare? Il tema? La versione di WP? Alcuni settaggi di Woocommerce che vanno in conflitto?
    Insomma non so più dove sbattere la testa.

    Ho provato a disabilitare tutti i vari plugin (WooCommerce escluso), ad eliminare le altre aggiunte al file funciotns.php, non saprei che altro fare.

    Mi puoi dare un aiuto?

    • Roberto Rota 23 Set 2015 at 17:59 #

      Ciao Andrea, io ho la stessa funzione applicata in più d’uno dei woocommerce che seguo, tutti aggiornati e con diversi temi/configurazioni, ma mi sembra che stia funzionando ancora bene.

      per capirci di più bisognerebbe dare un’occhiata sotto il cofano

      rob

      • Andrea 24 Set 2015 at 08:13 #

        Giusto per intenderci,
        questa funzione dovrebbe nascondere la spedizione con l’ ID ” local_delivery ” oppure “flat_rate” ?

        Io ho attive queste 3 tipologie di spedizioni:

        Ritiro in sede = local_pickup
        Spedizione gratuita = free_shipping
        Spedizione nazionale = local_delivery

        Può essere questo il problema?

        Ciao

        A.

        • Roberto Rota 24 Set 2015 at 21:41 #

          Ciao Andrea, così com’è lo snippet nasconde tutte le opzioni a pagamento.
          Se segui le istruzioni puoi fare in modo che ne nasconda una sola, nello snippet c’è l’esempio della flat_rate

          rob

          • Matteo 5 Nov 2015 at 22:34 #

            Ciao Roberto,

            Anche io sarei intenzionato a nascondere SOLO la “spedizione standard”, e a lasciare quella gratuita e quella Nazionale (local_delivery). Ho provato a cambiare il codice come da istruzioni ma forse sbaglio qualcosa. Riusciresti ad incollarmi il codice esatto? 🙂

            • Roberto Rota 5 Nov 2015 at 22:48 #

              Ciao Matteo, appena riesco a ritagliarmi un po’ di tempo faccio qualche prova per scrupolo e te lo posto.

              Non garantisco quando, sono imballato in questo periodo…

              Roberto

  9. vale 14 Ott 2015 at 16:57 #

    Ok, intanto grazie mille per avermi inviata a questo articolo.
    Però…mettiamola così, io non lo so fare 🙂 Ergo, ti spiego meglio quello di cui avrei bisogno… Una volta superato l’ordine di 99,00€ la spesa di spedizione diventa gratuita ma una volta nel carrello mi compare la “spedizione gratuita” ma le altre rimangono comunque visibili e proprio per la questione di correttezza di cui parlate sopra, non vorremmo che i nostri utenti si sbagliassero.
    Come possiamo fare in alternativa senza cercare di capire come e dove si copia sto codice? 🙂
    Grazie ancora,
    Vale

    • Roberto Rota 14 Ott 2015 at 17:16 #

      Ciao Vale,

      non è difficile: copi lo script nel file delle funzioni del tema (functions.php), e se hai predisposto correttamente la spedizione gratuita quando qualcuno supera il suo tetto le altre spedizioni non dovrebbero più apparire, sia nel carrello che nel checkout.

      Mi raccomando fai un bel backup prima che non si sa mai 😉

      rob

      • vale 14 Ott 2015 at 17:30 #

        ho trovato in editor il functions.php ma devo copiare e incollare tutte le righe in quale punto del functions.php? all’inizio? alla fine? a una certa?
        :-/

        • Roberto Rota 14 Ott 2015 at 17:55 #

          Per sicurezza copiale ala fine, così le ritrovi subito se devi toglierle.

          Per sicurezza, fai un backup…

          rob

          • vale 14 Ott 2015 at 18:08 #

            Ce l’ ho fattaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!
            Grazie mille!!!!!!!!!!

  10. Enrico 11 Dic 2015 at 10:00 #

    Ciao Roberto, questo articolo mi è stato davvero utile, mi unisco alla richiesta che ti è stata fatta il 13 maggio riguardo a far si che il ritiro in sede appaia sempre. è un discorso molto complicato?

    • Roberto Rota 11 Dic 2015 at 10:15 #

      Ciao Enrico, non dovrebbe essere troppo complicato, dovrei solo trovare il tempo (tiranno) per fare qualche prova.

      rob

  11. Patrizia Criscuolo 20 Mag 2016 at 10:20 #

    salve, ho inserito il codice…mi segna solo una spedizione e non funziona quella nazionale che avevo impostato

    • Roberto Rota 20 Mag 2016 at 10:55 #

      Ciao Patrizia, difficile risponderti senza vedere la struttura e soprattutto le impostazioni delle spedizioni.

      rob

      • Patrizia Criscuolo 21 Mag 2016 at 09:50 #

        ciao, Ho impostato la spedizione nazionale a €5,50 , il secondo oggetto a 0 e la spedizione gratis per un ordine di €40
        Mi compaiono entrambe ed entrambe selezionabili per qualsiasi cifra spendo

  12. Micol 3 Giu 2016 at 15:00 #

    Ciao, grazie del suggerimento, però avrei necessità di lasciare il metodo Ritiro in sede anche con spedizione gratuita. E’ possibile? A me ritiro il sede lo lascia solo se l’importo è al di sotto della spedizione gratuita. Come posso fare?

    • Roberto Rota 3 Giu 2016 at 15:09 #

      Se guardi la seconda parte dello snippet, puoi isolare le spedizioni. Ora non mi ricordo il nome del ritiro in sede, ma non dovrebbe essere difficile rimediarlo.

      rob

  13. Matteo 29 Set 2016 at 09:40 #

    Ciao Roberto e grazie per la tua guida! Avendo aggiornato, mi accodo alla richiesta di Micol (in questo caso però per il contrassegno, il quale viene disabilitato; mentre sotto la soglia della spedizione gratuita, è regolarmente presente). In particolare, qual’è la stringa da implementare?

    Grazie

  14. Alessia 5 Ott 2016 at 12:40 #

    Tutti perfetto, ma quando non si utilizza il corriere perché si sceglie il RITIRO IN SEDE, come si può nascondere la modalità di pagamento in contrassegno (che mi crea un supplemento di 5€ al totale del carrello)?

    • Roberto Rota 5 Ott 2016 at 14:56 #

      Se hai configurato correttamente le spedizioni ed i pagamenti, non dovrebbe succedere. Il contrassegno deve essere legato ad uno o più metodi di spedizione, ma non al ritiro locale.

      rob

      • Alessia 5 Ott 2016 at 15:02 #

        Hai perfettamente ragione, proprio ora ho visto che nel pannello del contrassegno esiste una tendina che permette di associarlo ad una o più modalità di spedizione. E’ bastato selezionarle tutte, escludendo il Ritiro in sede, per far sparire il contrassegno quando si sceglie quest’ultima opzione.
        E’ un elemento dell’ultimo aggiornato di WP che non avevo considerato.
        Grazie Rob!

  15. silvestro 30 Ott 2016 at 18:56 #

    Ciao Roberto, ogni volta che cerco una soluzione a un problema wordpress e affini con Google trovo sempre doversi risultati ma i tuoi sono sempre chiari e risolutivi, da ultimo questo snippet.
    Complimenti e grazie per ciò che fai
    Silvestro

Trackbacks/Pingbacks

  1. √ Perché non funziona più lo script che nasconde le spedizioni di WooCommerce? - 20 Set 2016

    […] installato lo script per nascondere le spedizioni a pagamento, quando è presente una spedizione gratuita, ma da quando ho aggiornato WooCommerce non mi funziona […]

Dubbi o suggerimenti? Lascia un commento!

Pin It on Pinterest