Escludere una modalità di pagamento per certi prodotti o categorie in WooCommerce
Per impostazione predefinita WooCommerce applica le modalità di pagamento prescelte a tutti i prodotti. Se date la possibilità di pagare alla consegna, automaticamente questa modalità sarà applicata a tutti i prodotti dello store.
Come escludere quindi certe modalità di pagamento per determinati prodotti o categorie?
Al solito ci sono due metodi, uno basato sul codice e uno che sfrutta i plugin.
Codice da aggiungere al functions.php del tema child
Roberto Melogli ha ideato questo codice, da aggiungere al functions.php:
/**
* @snippet Disable Payment Method for Specific Category
* @how-to Watch tutorial @ https://businessbloomer.com/?p=19055
* @sourcecode https://businessbloomer.com/?p=19892
* @author Rodolfo Melogli
* @testedwith WooCommerce 3.2.5
*/
add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_unset_gateway_by_category' );
function bbloomer_unset_gateway_by_category( $available_gateways ) {
global $woocommerce;
$unset = false;
$category_ids = array( 8, 37 );
foreach ( $woocommerce->cart->cart_contents as $key => $values ) {
$terms = get_the_terms( $values['product_id'], 'product_cat' );
foreach ( $terms as $term ) {
if ( in_array( $term->term_id, $category_ids ) ) {
$unset = true;
break;
}
}
}
if ( $unset == true ) unset( $available_gateways['cheque'] );
return $available_gateways;
}
Nel codice deve essere sostituito gli id delle categorie alla riga:
$category_ids = array( 8, 37 );
(gli id delle categorie si ricavano da Prodotti > Categorie, click su Modifica sotto una categoria. Nella barra del browser, l’id della categoria è il numero dopo wp-admin/term.php?taxonomy=product_cat&tag_ID=…)
Inoltre deve essere indicato quale gateway escludere alla riga:
if ( $unset == true ) unset( $available_gateways['cheque'] );
(la stringa da inserire al posti di ‘cheque’ si ricava da WooCommerce > Impostazioni > Pagamenti, click su un metodo di pagamento. Nella barra del browser, il nome del pagamento è il termine dopo /wp-admin/admin.php?page=wc-settings&tab=checkout§ion=…)
Personalizzato il codice, il metodo di pagamento indicato dovrebbe scomparire dal checkout.
Pagina ufficiale: https://businessbloomer.com/woocommerce-disable-payment-method-for-specific-category/
Utilizzare un plugin
Per chi, come me :-), ha poca dimestichezza col codice, si può sempre ricorrere a un plugin. Ce ne sono alcuni commerciali come YITH WooCommerce Payment Method Restrictions o gratuito come Woocommerce Payment Gateway per Product (ma con poche installazioni e poco aggiornato, quindi sconsigliato), ma quello che più di tutti ha catturato la mia attenzione è Booster per WooCommerce (molto aggiornato e con decine di migliaia di installazioni) che, offre una notevole quantità di personalizzazioni di WooCommerce, tra cui proprio l’esclusione di una modalità di pagamento per una certa categoria anche nella sua versione free (quella per prodotto è a pagamento).

Una volta installata e attivata la versione free: WooCommerce > Impostazioni, tab Booster > PAYMENT GATEWAYS > check accanto a Gateways per Product or Category > Salva le modifiche
Tornare a Gateways per Product or Category > Impostazioni > aggiungere i termini Include o Exclude accanto alle varie modalità di pagamento che si vogliono includere o escludere > Salva le modifiche (in fondo in fondo)
Documentazione ufficiale: https://booster.io/features/woocommerce-payment-gateways-per-product-or-category/
Ciao, sarebbe possibile in qualche modo (anche con altri plugin) escludere un attributo di prodotto, solo per una tipologia di pagamento? Grazie
Ciao Andrea.
Grazie per la domanda.
Purtroppo non so risponderti, non mi è mai capitata una richiesta del genere.
Un saluto
Buongiorno, ho un cliente che vuole spedire alcuni prodotti solamente in Italia escludendo gli altri stati europei. C’è possibilità di fare questa procedura con woocommerce?
Grazie
Ciao Marco.
Ci sono alcuni plugin aggiuntivi a pagamento che possono aiutarti.
Prova a vedere se questi 3 fanno al caso tuo:
https://woocommerce.com/it-it/products/per-product-shipping/
https://jem-products.com/woocommerce-table-rate-shipping-pro/
https://yithemes.com/themes/plugins/yith-product-shipping-for-woocommerce/
Spero di esserti stato di aiuto
salve
come posso impostare nel carrello che un prodotto non concorra alla formazione della spedizione gratuita? ad esempio se imposto un prodotto che sia una partecipazione ad un concorso di € 3 e la spedizione gratuita è per € 60 acquistando altri prodotti, vorrei che il totale del carrello sia € 63
possibile?