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&section=…)

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).

La pagina principale del plugin Booster per WooCommerce

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/


Pubblicato

in

da

Tag:

Commenti

5 risposte a “Escludere una modalità di pagamento per certi prodotti o categorie in WooCommerce”

  1. Avatar Andrea Maio
    Andrea Maio

    Ciao, sarebbe possibile in qualche modo (anche con altri plugin) escludere un attributo di prodotto, solo per una tipologia di pagamento? Grazie

    1. Avatar Marco Raimondi

      Ciao Andrea.
      Grazie per la domanda.
      Purtroppo non so risponderti, non mi è mai capitata una richiesta del genere.
      Un saluto

  2. Avatar Marco Lorenzi

    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

    1. Avatar Marco Raimondi

      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

  3. Avatar francesco
    francesco

    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?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *