Abilitare la spedizione gratuita su WooCommerce per prodotti specifici
Vorrei sapere se è possibile abilitare la spedizione gratuita con WooCommerce solo se determinati articoli (o articoli di determinate categorie/classi di spedizione) sono inclusi nel carrello.
L'opzione Spedizione Gratuita si attiva solo in base al valore del carrello o tramite un codice coupon, quindi ho esaminato la spedizione a Tariffa Fissa e ho scoperto che dà priorità alla classe di spedizione più costosa rispetto a quelle più economiche. Questo significa che la classe di spedizione gratuita che ho creato non sovrascrive mai la tariffa predefinita.
Capisco la logica dietro questo comportamento, ma è l'opposto di ciò di cui ho bisogno, poiché l'idea è quella di incentivare gli acquisti di prodotti con margini di profitto più elevati eliminando le spese di spedizione quando sono inclusi in un ordine.
Non so se quello che sto cercando di ottenere non sia semplicemente possibile all'interno di WooCommerce. Un coupon che si applica solo a determinati prodotti/categorie sembra essere la soluzione più vicina, ma preferirei non costringere gli utenti a inserire un codice al checkout.
Qualcuno sa se esistono modi più semplici per offrire la spedizione gratuita agli utenti che acquistano determinati prodotti?

Qualcuno sa se esistono modi più semplici per offrire la spedizione gratuita agli utenti che acquistano determinati prodotti?
In realtà, quando crei un prodotto puoi semplicemente contrassegnarlo come prodotto Virtuale direttamente nell'editor del prodotto e questo escluderà completamente la spedizione per quell'articolo.

Questo funziona per i prodotti semplici, ma non per altri tipi di prodotti -- ad esempio quelli variabili. Bel tentativo comunque. Probabilmente funzionerà per alcune persone.

Perché non funziona per i prodotti variabili? Puoi impostare ogni variazione come virtual
.

Ecco un frammento di codice raccolto da alcuni Gist presi da una discussione su GitHub segnalata da @Ewout in un'altra risposta. Ho aggiunto un var_dump()
, così puoi decommentarlo e verificare cosa esattamente vuoi rimuovere.
$available_methods
è un array
di:
$available_methods as $method_id => $method
Confronta con $method_id
se hai bisogno di controlli più specifici.
// Nascondi l'opzione di spedizione standard quando è disponibile la spedizione gratuita
add_filter( 'woocommerce_available_shipping_methods', 'wpse90835_hide_standard_shipping_when_free_is_available' );
/**
* Nasconde l'opzione di spedizione standard quando è disponibile la spedizione gratuita
*
* @param array $available_methods
*/
function wpse90835_hide_standard_shipping_when_free_is_available( $available_methods )
{
// Sviluppatori!: Usa questo dump per vedere cosa puoi rimuovere
# var_dump( $available_methods );
// rimuove l'opzione di spedizione standard
if (
isset( $available_methods['free_shipping'] )
AND isset( $available_methods['flat_rate'] )
)
unset( $available_methods['flat_rate'] );
return $available_methods;
}

Ho creato un plugin per WooCommerce che permette agli utenti di configurare impostazioni avanzate per la spedizione gratuita. Nel plugin è possibile selezionare determinati prodotti per la spedizione gratuita.
Puoi trovare il plugin gratuitamente su wordpress.org chiamato WooCommerce Advanced Free Shipping
Spero che sia utile.

Forse questo non risponde completamente alla tua domanda, ma il plugin per le spedizioni a tariffa basata su tabella ti offre l'opzione di impostare una priorità per una tariffa specifica. Inoltre, questa discussione fornisce molti indizi su dove cercare possibili soluzioni

Grazie. Guardando la documentazione per Table Rate Shipping sembra che faccia esattamente quello di cui ho bisogno. Se il mio datore di lavoro accetterà la licenza, aggiornerò per confermare se è utile.

Basandomi sul codice di kaiser (sopra) ho creato il seguente codice:
/**
* Nasconde l'opzione di spedizione gratuita quando è disponibile la Spedizione Standard
*
* @param array $available_methods
*/
function mwe_hide_free_shipping_when_standard_shipping_is_available($available_methods) {
// rimuove l'opzione di spedizione standard
if (isset($available_methods['free_shipping']) AND isset( $available_methods['flat_rate'])) {
unset($available_methods['free_shipping']);
}
return $available_methods;
}
add_filter('woocommerce_available_shipping_methods', 'mwe_hide_free_shipping_when_standard_shipping_is_available');
Per quanto riguarda la configurazione di WooCommerce, ho abilitato sia la Spedizione Gratuita che il Tasso Fisso nelle Opzioni di Spedizione di Woo. Poi ho semplicemente impostato una Classe di Spedizione, specificato il suo costo (ad esempio, £7.95) nella pagina delle opzioni del Tasso Fisso, e quindi ho assegnato quella classe di spedizione ai prodotti per i quali voglio addebitare £7.95 di spese di spedizione.

L'opzione "virtuale" rimuoverà tutti i costi di spedizione, ma elimina anche la possibilità di spedire a un indirizzo diverso rispetto a quello di fatturazione del cliente. Questo non è un problema se il cliente acquista anche altri prodotti non virtuali, ma lo è se è l'unica cosa che acquista.
