Hai bisogno di un E-Commerce che funziona davvero?
Contattami Ora!Come disabilitare i metodi di pagamento per categorie specifiche in WooCommerce
Hai mai avuto la necessità di nascondere un metodo di pagamento quando nel carrello sono presenti prodotti di una determinata categoria? Ad esempio: non vuoi permettere il contrassegno per prodotti digitali?
Nessun problema! Con un piccolo snippet PHP, puoi disattivare automaticamente uno o più metodi di pagamento in base alla categoria del prodotto, in fase di checkout.
Vediamo subito come funziona e come puoi personalizzarlo in base al tuo shop.
Perché limitare i metodi di pagamento per categoria
In WooCommerce, tutti i metodi di pagamento sono visibili per impostazione predefinita. Ma ci sono casi in cui ha senso nascondere alcune opzioni in base alla natura dei prodotti.
Esempi pratici
- ❌ Prodotti digitali: non puoi consegnarli fisicamente, quindi niente contrassegno.
- 📦 Prodotti su prenotazione: richiedono pagamento anticipato, quindi blocchi il pagamento alla consegna.
- 💳 Servizi o abbonamenti: devono essere pagati con carta o bonifico.
Questa personalizzazione ti aiuta a rendere l’esperienza utente più coerente e a prevenire errori o richieste impossibili da gestire.
Snippet PHP per disabilitare un metodo di pagamento per categoria
Ecco lo snippet completo da inserire nel tuo tema (o meglio, in un plugin di snippet):
Codice PHP
add_filter('woocommerce_available_payment_gateways', 'disabilita_contrassegno_per_categoria');
function disabilita_contrassegno_per_categoria($gateways) {
if (is_admin() || !is_checkout()) return $gateways;
// Sostituisci con lo slug della tua categoria, lo trovi nelle categorie di prodotto di Woo
$categorie_escluse = array('prodotti-digitali');
foreach (WC()->cart->get_cart_contents() as $item) {
$prodotto = $item['data'];
if (has_term($categorie_escluse, 'product_cat', $prodotto->get_id())) {
unset($gateways['cod']); // 'cod' = sta per Cash On Delivery
break;
}
}
return $gateways;
}
Dove inserire lo snippet nel tema WordPress
Hai due opzioni:
- Nel file
functions.phpdel tuo tema (o meglio, tema child). - Usa un plugin come “Code Snippets” per gestire il codice in modo sicuro, senza modificare i file del tema.
🔒 Consiglio: lavora sempre su un tema child, così non perdi le modifiche con gli aggiornamenti del tema.
Come funziona il codice
Vediamolo in azione, riga per riga.
Controllo del carrello
Lo snippet analizza tutti i prodotti nel carrello. Se uno di questi appartiene a una delle categorie da escludere (prodotti-digitali, in questo caso), allora passa all’azione.
Disattivazione del metodo di pagamento
Nel nostro esempio, la riga chiave è questa:
unset($gateways['cod']);Questa istruzione rimuove il contrassegno (“cod” è l’ID usato da WooCommerce per “Cash on Delivery”) dalla lista dei metodi di pagamento disponibili.
💡 Risultato? Il cliente non potrà scegliere quel metodo al checkout, se ha un prodotto digitale nel carrello.
Personalizzazioni utili dello snippet
Vuoi disattivare altri metodi oltre al contrassegno?
Basta sostituire 'cod' con l’ID del metodo che vuoi rimuovere. Ecco qualche esempio comune:
'bacs'→ Bonifico bancario'cheque'→ Assegno'paypal'→ PayPal'stripe'→ Carta di credito con Stripe
Puoi anche rimuovere più metodi, aggiungendo altre righe di unset().
Vuoi applicare la logica a più categorie?
Aggiungi altri slug nell’array:
$categorie_escluse = array('prodotti-digitali', 'servizi', 'abbonamenti');Lo snippet funzionerà anche se nel carrello c’è solo uno dei prodotti appartenenti a queste categorie.
Conclusione: pagamento su misura in WooCommerce
Con poche righe di codice, puoi personalizzare i metodi di pagamento in WooCommerce in modo dinamico, preciso e senza usare plugin esterni.
In questo esempio hai visto come disattivare il contrassegno per i prodotti digitali, ma la logica si può facilmente estendere a qualsiasi scenario: servizi, prodotti su prenotazione, eventi, ecc.
🎯 Risultato: checkout più pulito, meno errori e un’esperienza d’acquisto ottimizzata.