[woocommerce] Disabilitare metodi di spedizione in base alla classe di spedizione

Aggiungendo un filtro a functions.php del tema attivo o in qualunque plugin attivo, possiamo escludere alcuni metodi di spedizione in base alla class di spedizione del prodotto.

Immaginiamo di aver aggiunto, tra i metodi di spedizione, qualcosa di simile (nel mio caso Corriere BRT):

E contestualmente abbiamo creato una classe di spedizione chiamata sempre Corriere BRT nel modo seguente:

A questo punto vogliamo che solo i prodotti con la suddetta classe abbiano a disposizione il suddetto metodo di spedizione, che venga invece escluso per quelli senza una classe.

Procuriamoci anzitutto l’ID della classe e quello della spedizione. Utilizzando Chrome, nel mio esempio, clicchiamo col destro sulla classe di spedizione e scegliamo Ispeziona.

Nella finestra di ispezione individuiamo il codice della classe nel modo seguente:

Nel mio caso il valore da salvare è 17834.

Adesso individuiamo l’ID del metodo di spedizione. Lo possiamo recuperare dal carrello sempre utilizzando Ispeziona su Chrome. Andiamo nel carrello dove abbiamo un prodotto con il metodo di spedizione desiderato:

Clicchiamo su Ispeziona ed individuiamo il seguente pezzo di codice:

Nel mio caso il codice è flat_rate:7

Raccolte tutte queste informazioni andiamo a modificare il file functions.php aggiungendo il filtro.

Modifichiamo opportunamente i due codici che ci interessano.

Fatto questo ci accorgeremo come il hook woocommerce_package_rates non viene chiamato sempre, ma solamente al momento in cui si aggiorna la quantità di prodotti nel carrello. Affinché la cosa funzioni correttamente dobbiamo chiamarlo sempre.

Per farlo andiamo su WooCommerce > Impostazioni > Spedizione > Opzioni di spedizione e qui spuntiamo la voce Abilita la modalità di debug

Se abbiamo fatto tutto correttamente adesso il metodo di spedizione è disponibile solo per la classe scelta.

Vedi articolo

[php] Modificare programmaticamente i prezzi nel carrello di WooCommerce su WordPress

Immaginiamo di voler modificare i prezzi dei prodotti su WooCommerce una volta che sono stati inseriti nel carrello. Nel mio esempio voglio aggiungere uno sconto del 50% su un prodotto quando vengono comprati almeno 2 prodotti dello stesso tipo.

Per fare questo anzitutto voglio calcolare quanto verrebbe il costo di un singolo prodotto affinché la somma di tutti i prodotti, dello stesso tipo, risulti tale che 1 solo dei prodotti sia scontato al 50%.

Ammettiamo che n sia il numero di prodotti (n ≥ 2), s lo sconto (nel mio caso 50%) e x il prezzo di ciascun prodotto. Avremo

n*x=x*s+(n-1)*x

x = x*(s+n-1)/n

Stabilito questo usiamo il hook per WooCommerce woocommerce_before_calculate_totals inserendo il nostro calcolo per ultimo (dopo tutti gli eventuali plugin).

La base del codice che vogliamo usare è la seguente:

Questa funzione può essere inserita dentro functions.php del nostro tema.

Detto questo dobbiamo anche prendere in considerazione che sul prezzo finale del prodotto potrebbero incidere ulteriori parametri (derivati magari da altri plugin) che potrebbero variare il prezzo. Per ovviare a questo problema legherò il hook alla fine di tutte le altre eventuali operazioni (da qui il valore 1000 nell’ordinamento di esecuzione del hook) e calcolerò il prezzo a partire da quello base, applicando poi il modificatore che sarebbe risultato prima del mio sconto.

La nuova funzione sarà la seguente:

Volendo calcolare il valore scontato al 50% al parametro p ho inserito il valore 0.5.

In questo modo calcoliamo il prezzo finale che dovrebbe avere ciascun prodotto, affinché risulti che la somma dei prodotti sia la somma di un prodotto scontato al 50% e di tutti gli altri a prezzo pieno (compresi gli eventuali modificatori).

Vedi articolo

[woocommerce] Nascondere gli attributi senza alcuna variante attiva

In WooCommerce è possibile creare prodotti con diverse varianti. Immaginiamo di avere una situazione come la seguente:

 

In questo caso la prima variante di colore non è disponibile in alcuna taglia e se la proviamo a selezionare ci compare un avviso che ci dice che non c’è alcun prodotto selezionabile. Per evitare che il cliente debba testare tutte le combinazioni inutilmente WooCommerce, sotto a 10 variazioni per prodotto, tende a nascondere automaticamente le combinazioni inesistenti.

Quando però, come in questo caso, il numero di variazioni aumenta per motivi di prestazioni l’opzione non è attiva. Per aumentare tale limite basta aggiungere a functions.php nel nostro tema le seguenti righe di codice:

A questo punto vedremo un risultato come il seguente (abbiamo impostato il limite a 500):

Si può notare come il primo colore, assieme ad altri, è automaticamente sparito.

Vedi articolo