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/
Lascia un commento