0

Woocommerce: come evitare di far acquistare prodotti di altre categoria quando nel carrello ce n’è una specifica

Woocommerce è un plugin davvero flessibile e irrinunciabile per chi decide di sviluppare un e-commerce con WordPress, ma tante volte la richiesta particolare del cliente è sempre dietro l’angolo.

Ad esempio, potrebbe capitare che si debba configurare il sistema in modo tale che, se messo nel carrello uno o più prodotti di una certa categoria, non sia possibile acquistare prodotti di altre categorie.

Questo potrebbe accadere perchè per vendere prodotti una categoria “speciale” in realtà occorrono particolari accortezze sulla spedizione, o sui metodi di pagamento, o molto semplicemente perchè non si vogliono mischiare le cose, come ad esempio quando si vuole impedire di acquistare più brand insieme.

Woocommerce naturalmente non ha questa funzionalità integrata, e per non appesantire il sito installando plugin su plugin, è possibile lavorare direttamente da codice inserendo il seguente frammento nel file functions.php del tema.

Nel codice occorrerà semplicemente sostituire ID_DELLA_CATEGORIA con l’ID effettivo della categoria che vogliamo rendere unica.

add_filter ( 'woocommerce_before_cart', 'tantrahost_solo_categorie' );
function tantrahost_solo_categorie() {
        global $woocommerce;
        $cart_contents    =  $woocommerce->cart->get_cart( );
        $cart_item_keys   =  array_keys ( $cart_contents );
        $cart_item_count  =  count ( $cart_item_keys );

        // Non fare nulla se il carrello è vuoto o se c'è solo un elemento
        if ( ! $cart_contents || $cart_item_count == 1 ) {
                return null;
        }

      
	$catTarget = 0;
	$catAltro = 0;
        foreach ( $cart_item_keys as $key ) {
	     $product_id  =  $cart_contents[$key]['product_id'];
             $terms = get_the_terms ( $product_id, 'product_cat' );
             foreach ( $terms as $term ) {
                $cat_id = $term->id;
             }
	     if($cat_id == 'ID_DELLA_CATEGORIA'){
		$catTarget++;
	     }else{
		$catAltro ++;
	     }
	     if ( $catTarget >0 &&  $catAltro >0) {
		$woocommerce->cart->set_quantity ( $key, 0, true );
		$mismatched_categories  =  1;
	     }
        }
        // Mostriamo il messaggio di errore
        if ( isset ( $mismatched_categories ) ) {
			echo '<p class="woocommerce-error"><b>Non è possibile acquistare prodotti di due categorie diverse.</b><br /> Per ordinare prodotti di una categoria diversa, <b>effettua due acquisti separati</b> o <b>contattaci</b>.</p>';
			}
        }

Lascia un commento

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