✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Come aggiungere in modo programmatico uno sconto personalizzato a WooCommerce Checkout

49

In questo post vedremo come aggiungere sconti in modo programmatico e automatico. Per fare ciò utilizziamo la funzionalità coupon di WooCommerce ma la rendiamo automatica e nascondiamo il fatto che si tratta di un coupon per i clienti. Ho cercato di mantenere il codice il più generale possibile in quanto le condizioni per l’applicazione degli sconti possono variare molto per chiunque legga questo.

Perché i coupon sono il modo per farlo

Nelle versioni precedenti di WooCommerce avevamo alcune opzioni ("hackish") per aggiungere sconti con il codice, ad esempio fornendo un numero negativo add_fee()o lavorando con get_discounted_price(). Sfortunatamente questi metodi non funzionano più o sono considerati legacy e verranno rimossi nelle versioni successive. Il modo strutturalmente buono per aggiungere sconti è utilizzare la funzionalità coupon integrata in WooCommerce.

Tuttavia un coupon generalmente non può essere applicato automaticamente a un carrello. Richiede al cliente di digitare manualmente un codice coupon che deve essere stato fornito. In alcuni negozi online vuoi solo uno sconto applicato automaticamente quando una determinata condizione è stata soddisfatta senza che il cliente debba fare nulla. Questo è ciò che sistemeremo usando il codice.

Sconti personalizzati con coupon

Dovrai creare un coupon con un codice e configurarlo con i parametri che desideri. Potrai applicarlo, rimuoverlo e modificare diversi output ovunque il coupon sia visibile per il cliente. Facoltativamente, se non desideri effettivamente che i coupon siano disponibili per i clienti nel tuo negozio online, esamineremo alcuni semplici trucchi per nascondere le opzioni per inserire manualmente i codici coupon.

Nell’esempio di codice seguente sto raggruppando tutto il codice correlato in una classe PHP. Questo aiuta per un codice più pulito ma è particolarmente utile perché vogliamo fare riferimento al codice coupon più volte. Definirla come una variabile di classe è meglio che ripeterla in più funzioni.

Crea il tuo sconto come coupon

Il primo passo è creare il coupon che sarà il “segnaposto" del tuo sconto. Il più semplice è semplicemente crearne uno nell’amministratore di WooCommerce (WooCommerce > Coupon > Aggiungi coupon).

Se desideri creare il coupon in modo programmatico, un coupon è in realtà un post con cui puoi creare wp_insert_post(), ma devi fare attenzione a creare il post del coupon solo una volta. WooCommerce ha una breve guida su come creare un coupon in modo programmatico.

Fornisci uno slug univoco come codice coupon e imposta come minimo l’importo dello sconto (una percentuale o una tariffa fissa). Per quanto riguarda l’esempio di codice riportato di seguito, ho creato un codice coupon ‘ example‘ (consiglio di utilizzare un nome più creativo e appropriato per il tuo).

Creazione della classe PHP che conterrà tutto il nostro codice

Passiamo finalmente alla codifica! Puoi definire questa classe direttamente all’interno del tuo tema functions.php, nel codice del plugin o in un file separato incluso.

class AWPCustomDiscount { private $coupon_code = 'example';   public function __construct() {   } } new AWPCustomDiscount();

Dai un nome alla tua classe come preferisci e sostituisci la variabile di classe $coupon_codecon quello che hai chiamato il tuo coupon. Non dimenticare di inizializzare la classe dopo alla fine (new AWPCustomDiscount()).

Se prima hai programmato orientato agli oggetti, questo dovrebbe esserti familiare. In caso contrario, non preoccuparti, dovrebbe essere semplice da seguire. Aggiungeremo alcune funzioni qui dentro e faremo riferimento al codice coupon con $this->coupon_code. Iniziamo con il codice responsabile dell’effettiva aggiunta del coupon quando le condizioni sono soddisfatte.

Applicazione del coupon in modo programmatico

Per esperienza ho imparato che l’aggancio del codice per l’applicazione e la rimozione dei coupon funziona meglio e in modo più coerente utilizzando i due hook seguenti; uno per il carrello (woocommerce_before_cart) e uno per la cassa (woocommerce_before_checkout_form).

All’interno della funzione tutto ciò che dobbiamo fare è verificare le condizioni desiderate. WooCommerce offre funzioni per ottenere l’oggetto carrello with WC()->cartche possiamo utilizzare per ottenere tutte le informazioni di cui abbiamo bisogno sul carrello come i suoi articoli e totali. A titolo di esempio il codice sottostante applicherà uno sconto se il totale del carrello (esclusi eventuali sconti) è superiore a un determinato importo.

Dovremmo anche assicurarci che, se le condizioni non sono soddisfatte, dovremmo rimuovere lo sconto se è stato aggiunto in precedenza. Nel nostro esempio, immaginiamo che il cliente abbia superato l’importo massimo, ma poi è andato al carrello, ha rimosso alcuni articoli e quindi è tornato al di sotto dell’importo richiesto. Poiché i coupon non vengono applicati automaticamente, anche tutti i coupon applicati devono essere rimossi in modo programmatico.

Usandoapply_coupon

I coupon vengono aggiunti all’oggetto carrello apply_coupon()fornendo il codice coupon come parametro e vengono rimossi dall’oggetto carrello remove_coupon()con il codice coupon come parametro. Abbastanza semplice. Possiamo anche utilizzare la funzione così opportunamente denominata get_applied_coupons()nell’oggetto carrello per verificare se il nostro coupon è già stato applicato.

Se non hai familiarità con l’utilizzo di PHP orientato agli oggetti in WordPress; ecco un breve riassunto di come funziona quanto sopra: La __construct()funzione verrà eseguita ogni volta che la classe viene inizializzata, cosa che facciamo subito dopo la classe. All’interno __construct()di solito aggiungi tutti i ganci come faresti normalmente, ad esempio all’interno functions.php. Affinché WordPress possa trovare le nostre funzioni all’interno della nostra classe, dobbiamo dire all’hook di fare riferimento a una funzione definita in un array composto da $this(l’oggetto classe) e il nome della funzione.

All’interno della funzione addDiscount()programmiamo nelle nostre condizioni. Nell’esempio sopra prendo il totale del carrello utilizzando WC()->cart->get_subtotal()e lo confronto con le mie condizioni, essendo superiore a 500.

Nota: se devi recuperare e confrontare i totali del carrello, tieni presente che la maggior parte dei totali sono coupon inclusi. Ad esempio il più familiare WC()->cart->get_cart_contents_total()restituirà il totale prima della spedizione ma includeva gli sconti; il che significa che se il tuo sconto è stato precedentemente applicato, questo totale non sarà corretto da confrontare.

Puoi chiamare apply_coupon()senza controllare se il coupon è già stato applicato (l’ ifassegno alla riga n. 14), perché la funzione apply_coupon()stessa si assicurerà di non aggiungerlo nuovamente se era stato applicato prima. Tuttavia questo ifcontrollo impedisce al cliente di ricevere un messaggio di errore che dice "Il coupon è già stato applicato" ogni volta che il carrello viene aggiornato.

Ecco come apparirà il tuo sconto nei totali del carrello nel carrello e nella cassa:

Come aggiungere in modo programmatico uno sconto personalizzato a WooCommerce Checkout

Le tue condizioni per lo sconto

Le condizioni per il tuo coupon dipendono interamente da te e dalle tue esigenze. Ho impostato alcune condizioni di esempio per l’aggiunta di una tariffa personalizzata in un post precedente, ad esempio a seconda del luogo di spedizione o dei prodotti nel carrello. Puoi anche confrontare la data odierna se desideri fare uno sconto speciale per Natale o Halloween, o fare uno sconto in base alle condizioni del cliente che ha effettuato l’accesso.

Se preferisci applicare il coupon in base alle impostazioni che hai impostato sul coupon stesso, ad esempio escludere o includere determinati ID prodotto, puoi farlo anche tu. Puoi istanziare un oggetto del coupon dal codice coupon, in questo modo:

Con quell’oggetto coupon hai accesso a tutte le funzioni per recuperare le impostazioni che hai impostato sul coupon. Ad esempio, ottenere gli ID prodotto che devono essere inclusi per il coupon:

Fare riferimento alla documentazione per la classe WC_Coupon per vedere come ottenere ciò di cui hai bisogno.

Correggi l’etichetta visibile del coupon

Il coupon dovrebbe ormai essere aggiunto e rimosso quando il tuo carrello soddisfa o non soddisfa le condizioni stabilite in addDiscount(). Tuttavia, nella tabella dei totali sia nel carrello che nella cassa, lo sconto viene visualizzato come "Coupon: esempio" (o qualunque sia il tuo codice coupon). Questo non è buono! Fortunatamente è facile cambiare questa etichetta usando il filtro woocommerce_cart_totals_coupon_label. Aggiungeremo il filtro al nostro __construct()e definiremo una funzione:

Con il filtro otteniamo l’accesso all’oggetto coupon come secondo parametro. Con l’oggetto coupon possiamo verificarne la proprietà, codeindipendentemente dal fatto che corrisponda o meno al nostro codice coupon personalizzato. In tal caso, restituiamo l’etichetta che desideriamo. Regola l’output dell’etichetta come preferisci. In caso contrario, restituiamo l’etichetta del coupon predefinita.

Rimuovere l’opzione utente per rimuovere lo sconto

Un’altra cosa che potresti aver notato nella visualizzazione del nostro sconto nel carrello e nella cassa è che ha ricevuto un link "[Rimuovi]" dopo il suo importo. Questo è il comportamento predefinito dei coupon in WooCommerce, ma nel nostro caso non è desiderabile. Sia perché potrebbe confondere i clienti sia perché il nostro codice lo riapplica dopo la rimozione.

WooCommerce fornisce il filtro woocommerce_cart_totals_coupon_htmlper l’output dell’importo. Fortunatamente WooCommerce fornisce l’output HTML solo dell’importo stesso come terzo parametro di questo filtro. Possiamo semplicemente restituirlo invece di assicurarci che il nostro sconto sia presentato correttamente con valuta e tutto il resto.

Facoltativo: nascondere la funzionalità del coupon per i clienti

I coupon devono essere attivati ​​in WooCommerce affinché la nostra funzionalità di sconto funzioni, ma tieni presente che ciò aggiungerà l’opzione per i clienti che inseriranno manualmente i codici coupon sia nel carrello che nella cassa. Se non vuoi mostrare che il tuo negozio online ha la funzionalità coupon e, in particolare, impedire ai clienti di inserire manualmente i codici coupon, puoi farlo anche tu.

Rimozione dalla cassa

Rimuovere la funzionalità del coupon dalla cassa è facile e può essere eseguita all’interno della nostra classe. Rimuoviamo semplicemente il gancio che rende “scatola” il coupon, in questo modo:

... public function __construct() { add_action('woocommerce_before_cart', [$this, 'addDiscount']); add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']); add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2); add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3); remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10); } ...

Rimuovendolo dal carrello

Sfortunatamente, rimuovere la funzionalità del codice coupon nel carrello non è così facile in quanto è codificato in un modello. Dovrai sovrascrivere il modello di carrello di WooCommerce per rimuovere la funzionalità del coupon. Copia il file pluginswoocommercetemplatescartcart.phpin your-themewoocommercecartcart.php.

I file modello di WooCommerce cambiano costantemente, quindi darti un numero di riga esatto non sarebbe di aiuto. Ma troverai il codice che emette l’input e il pulsante per il coupon vicino alla parte inferiore del file; un po’ così:

Quello che devi fare è commentare l’output relativo al coupon. Consiglio di aggiungere un commento PHP con /*subito prima del if-check e chiuderlo con */subito dopo la parentesi di chiusura. Così:

A questo punto la funzionalità coupon del tuo negozio online dovrebbe essere virtualmente nascosta ai clienti! Ma il tuo sconto personalizzato dovrebbe funzionare perfettamente.

Fonte di registrazione: awhitepixel.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More