4

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>';
			}
        }

4 Comments

  1. salve
    come posso limitare l’acquisto ad un solo prodoto di una specifica categoria?
    grazie

  2. Io ho il problema di dover escludere dei prodotti per delle zone di spedizione. Non evitare che mettano nel carrello due prodotti di due differenti categorie. Forse potrei riuscirci se inserissi l’ID del prodotto?

  3. Salve,
    ho provato il codice in un ambiente di test, ma questo codice non mi funziona.
    Esistono dei Plugin che riescono a risolvere questo problema e quindi a permettermi di non far inserire nel carrello prodotti di altre categorie oltre a quelle già presenti nel carrello stesso?

Lascia un commento

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