WooCommerce: Nascondere altri metodi di spedizione se è presente la spedizione gratuita

Tempo di lettura: 3 minuti

Se è disponibile la spedizione gratuita, è possibile che tu non voglia mostrare le altre opzioni di spedizione (a pagamento).

WooCommerce mostra, per impostazione predefinita, tutte le tariffe di spedizione che corrispondono ad una determinata zona di spedizione, quindi non è possibile ottenere questo risultato dalle sole impostazioni.

Facciamo un esempio pratico, supponiamo di avere:

  • Spedizione con Corriere a 7€ (a pagamento)
  • Ritiro in sede (sempre presente)
  • Spedizione Gratuita al raggiungimento dei 30€ di spesa

spedizioni WooCommerce

Di default il sistema mostrerà i 2 i metodi di spedizione (corriere + ritiro in negozio) e mostrerà la spedizione gratuita solo al raggiungimento dei 30€. Di fatto però le mostrerà tutte e 3 insieme.

Come fare quindi per nascondere gli altri metodi di spedizione quando si innesca la spedizione gratuita?

Inserire questo codice all’interno del file functions.php:

add_filter('woocommerce_package_rates', 'nascondere_altri_metodi_spedizione_se_presente_gratuita', 10, 2);

function nascondere_altri_metodi_spedizione_se_presente_gratuita($rates, $package) {

//nascondo SOLO se è presente la spedizione gratuita
    if (isset($rates['free_shipping:8'])) { //<-- è necessario recuperare il codice della spedizione gratuita
        unset($rates['flat_rate:1']); //<-- nascondo spedizione con corriere
    }

    return $rates;
}

Alla riga 2 viene cercata la spedizione gratuita e, se è presente, alla riga 3 viene nascosta la spedizione con corriere in questo caso.

nella riga 3, al posto di flat_rate:1 inserire il nome della vostra spedizione.

Per recuperare il nome corretto occorre seguire questi step:

  • recarsi nella pagina del carrello o nel checkout
  • posizionarsi dove sono presenti le spedizioni

ispeziona

  • all’altezza della spedizione che vogliamo nascondere premere tasto destro e cliccare su ispeziona

value spedizione

  • verrà automaticamente selezionata la spedizione, visualizzare il tag INPUT e fare copia ed incolla del nome presente nell’etichetta VALUE
  • a questo punto inserirla alla riga 3 come specificato prima

Fare lo stesso procedimento nel caso si desiderasse nasconderne altre. In questo caso ricordarsi di aggiungere una riga al codice sopra, per esempio:

add_filter('woocommerce_package_rates', 'nascondere_altri_metodi_spedizione_se_presente_gratuita', 10, 2);

function nascondere_altri_metodi_spedizione_se_presente_gratuita($rates, $package) {

//nascondo SOLO se è presente la spedizione gratuita
    if (isset($rates['free_shipping:8'])) { //<-- è necessario recuperare il codice della spedizione gratuita
        unset($rates['flat_rate:1']); //<-- nascondo spedizione con corriere
        unset($rates['flat_rate:12']); //<-- nascondo spedizione aggiuntiva
        //e cosi via...
    }

    return $rates;
}

Continui a vedere le altre spedizioni anche dopo aver inserito questo codice?

E’ normale, segui questi step:

  • Per prima cosa svuota il carrello, riaggiungi un prodotto al carrello (dovrebbe essere già sufficiente)
  • non funzionasse ancora recati in WooCoommerce — Stato — Strumenti — e clicca su SVUOTA in relazione all’opzione Elimina sessioni dei cliente

svuotare sessioni cliente
Avete soluzioni differenti? Commentate e discutiamone insieme!

3 commenti su “WooCommerce: Nascondere altri metodi di spedizione se è presente la spedizione gratuita”

  1. Cesare Cantagalli

    Ciao, io ho 2 opzioni da visualizzare spedizione e ritiro in sede, qundi ho cercato di modificare tuo snippet ma funziona solo da un lato, cioè non esce più la spedizione (in caso ci sia) e mostra sempre ritiro in sede. Dove ho sbagliato?

    add_filter('woocommerce_package_rates', 'nascondere_altri_metodi_spedizione_se_presente_ritiro_sede', 10, 2);
     
    function nascondere_altri_metodi_spedizione_se_presente_ritiro_sede ($rates, $package) {
     
    //nascondo SOLO se è presente ritiro sede
        if (isset($rates['local_pickup:9'])) { //<-- codice ritiro in sede
            unset($rates['flat_rate:6']); //<-- nascondo spedizione con corriere
    
    		} else {
    		
    		
        if (isset($rates['flat_rate:6'])) { //<-- codice della spedizione gratuita
            unset($rates['local_pickup:9']); //<-- nascondo spedizione con corriere	
    		
    
             }}
     
        return $rates;
    }
    

Lascia un commento