WooCommerce: come nascondere categorie prodotti nella pagina shop

ATTENZIONE: questo articolo è stato scritto oltre un anno fa, ed i contenuti potrebbero non essere più validi o compatibili. Sei pregato di tenerne conto, e se hai informazioni in merito di segnalarmele, grazie.

Prodotti shop WooCommerce

La pagina shop di WooCommerce, quella che di solito è la home page prodotti dello store, di default mostra tutti i prodotti, di tutte le categorie, secondo l’ordine prestabilito.

In qualche caso, può essere utile che i prodotti di una o più categorie non vengano mostrati, vuoi per la tipologia di prodotti, vuoi perché magari di quelle particolari categorie vuoi creare delle pagine di shop alternative.

Si può fare, e come al solito ci viene in aiuto un facile snippet.

Il codice qui sotto va copiato nel file functions.php del tema in uso, preferibilmente un tema child, e va adattato per le categorie che si vogliono escludere dallo shop.

Bisogna andare alla riga 13 e sostituire “nome_categoria” con il nome reale della categoria che si vuole nascondere.

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
 
function custom_pre_get_posts_query( $q ) {
 
	if ( ! $q->is_main_query() ) return;
	if ( ! $q->is_post_type_archive() ) return;
	
	if ( ! is_admin() && is_shop() ) {
 
		$q->set( 'tax_query', array(array(
			'taxonomy' => 'product_cat',
			'field' => 'slug',
			'terms' => array( 'nome_categoria' ), // Non mostrare i prodotti di questa categoria
			'operator' => 'NOT IN'
		)));
	
	}
 
	remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
 
}

Bisogna far bene attenzione che i valori corrispondano esattamente ai nomi delle categorie da escludere.

Se si vogliono nascondere più categorie, occorre separare i valori con una virgola (es. ‘nome_categoria1′,’nome_categoria2′,’nome_categoria3’)

Snippet testato su WooCommerce 2.2.6.

Fonte snippet: Documentazione WooCommerce

Tags: , , , , ,

26 Risposte a “WooCommerce: come nascondere categorie prodotti nella pagina shop”

  1. Ciro 14 Ott 2014 at 12:09 #

    Ciao Roberto,

    Ho provato ad inserire la tua funzione in function php ma mi da errore, come posso risolvere?

    Grazie

    • Roberto Rota 14 Ott 2014 at 12:49 #

      Ciao Ciro,

      lo snippet l’ho testato pochi giorni fa, sull’ultima versione di WooCommerce 2.2.6, e funzionava regolarmente.

      Sicuro di averlo scritto per bene?

      Per sapere cosa non lo faccia funzionare, magari un conflitto con il tema o qualche plugin, bisognerebbe guardare i log, il debug può aiutare.

      rob

  2. floppy1978 15 Set 2015 at 16:10 #

    Ciao Roberto! 🙂
    Pensavo di utilizzare questo metodo per mostrare due diverse collezioni di abiti in un ecommerce di abbigliamento. In pratica la collezione estiva vorrei che rimanesse presente e consultabile ma che nella home del negozio fossero presenti i prodotti della collezione attuale autunno inverno. Pensi che la soluzione da te proposta sia quella ottimale? Grazie mille!

    • Roberto Rota 15 Set 2015 at 18:07 #

      Potrebbe essere una via percorribile, anche se troverei più efficace predisporre una pagina principale dello store ad-hoc.

      rob

      • floppy1978 15 Set 2015 at 18:26 #

        In che senso? Indirizzando a monte verso le due collezioni e creando due pagine ad hoc diverse che mostrino ognuna la categoria scelta? Grazie!

        • Roberto Rota 15 Set 2015 at 19:47 #

          Nel senso che non è obbligatorio che la home dello store riporti i prodotti in un dato ordine, ma te la puoi personalizzare a tuo piacimento, gli shortcode son fatti apposta.

          • floppy1978 15 Set 2015 at 20:22 #

            Giusto!! Posso decidere di far visualizzare nello shop solo una categoria top ad esempio usando, ad esempio, questo tipo di shortcode

            [product_categories number=”12″ parent=”0″]

            Giusto? 🙂
            Grazie per i preziosi consigli..sono molte le cose che devo ancora imparare..

  3. davide 9 Nov 2015 at 02:08 #

    Ciao Roberto,
    mi è stato utilissimo il tuo esempio, ma non riesco a rendere variabile l’array delle categorie, mi spiego meglio, avrei la necessità di filtrare i prodotti in base ad un valore inserito dall’utente nella home page che generando una query recuperi le categorie interessate… hai qualche idea ?
    grazie
    davide

    • Roberto Rota 9 Nov 2015 at 10:25 #

      Ciao Davide, il tuo non è più un problema di shortcode o di condizionali php, mi par di capire, ma devi portarti una o più variabili e sfruttarle per creare le condizioni corrette nella query.

      Un tantinello più complesso…

      rob

  4. federica 3 Dic 2015 at 12:52 #

    Perfetto!

  5. Lorenzo Bricchi 8 Apr 2016 at 17:43 #

    Ho provato ad aggiungere il codice indicato sopra, ma non funziona per woocommerce 2.5.5.
    Cercando nella documentazione ho trovato un codice leggeremente diverso che però funziona con la versione 2.5.5:

    add_action( ‘pre_get_posts’, ‘custom_pre_get_posts_query’ );

    function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;

    if ( ! is_admin() && is_shop() ) {

    $q->set( ‘tax_query’, array(array(
    ‘taxonomy’ => ‘product_cat’,
    ‘field’ => ‘slug’,
    ‘terms’ => array( ‘wholesale’ ), // Don’t display products in the knives category on the shop page
    ‘operator’ => ‘NOT IN’
    )));

    }

    remove_action( ‘pre_get_posts’, ‘custom_pre_get_posts_query’ );

    }

    • Roberto Rota 8 Apr 2016 at 19:53 #

      Ciao Lorenzo, ti ringrazio per il feedback farò dei controlli prima possibile

      rob

  6. Debora 2 Giu 2016 at 19:20 #

    Ciao Roberto,
    il tuo articolo è molto utile oltre ad essere l’unica cosa che si avvicina al mio problema…
    Sto lavorando in locale ad un sito vetrina di prodotti.
    Per necessità di visualizzazione e personalizzazioni, ho creato una pagina base per il negozio costituita da una galleria di categorie di prodotti realizzata con essential grid. Ma se setto questa mia pagina personalizzata come pagina base del negozio (dai settaggi di woocommerce) , oltre a visualizzare la mia galleria personalizzata mi viene visualizzato, sotto ad essa, anche tutto il catalogo dei prodotti di woocommerce (la shop page automatica per intenderci).
    C’è un modo per nasconderli dalla mia pagina dei prodotti personalizzata? Pensavo che con il tuo tuo codice fosse possibile poter nascondere tutte le categorie inserire tutti gli slug sarebbe un lavoro assurdo.
    Ti ringrazio in anticipi

    • Roberto Rota 3 Giu 2016 at 11:02 #

      Ciao Debora, sinceramente non mi sono mai posto il problema di escludere tutti i prodotti che woocommerce inserisce di default nella pagina definita come shop, magari se cerchi in giro qualche snippet già pronto esiste, oppure nel frattempo puoi nascondere tutto il blocco tramite CSS, non è molto ortodossa come soluzione ma potrebbe funzionare.

      rob

      • Debora 3 Giu 2016 at 12:01 #

        Ciao Roberto,
        ho provato a nascondere tutto il blocco tramite css, in effetti non è proprio ortodosso, dato che ho poi problemi di visualizzazione dei prodotti correlati nelle altre pagine di prodotto…
        Altri snippet online non ne ho ancora trovati…
        Grazie comunque 😉

    • federica 3 Giu 2016 at 11:50 #

      Ciao, io ho usato le opzioni woocommerce di Visual Composer.
      Nella pagina creata ad hoc ho inserito sia i box di categoria che una lista di prodotti appartenenti ad una precisa categoria.
      Se il tuo tema lo integra potresti risolverla così. Ciao

      Federica

      • Debora 3 Giu 2016 at 12:11 #

        Ciao Federica,
        il mio tema utilizza fusion builder, ma nessuna impostazione particolare in merito alla visualizzazione della shop page si woocommerce.

        Non so se sono stata chiara, ma quello che a me preme è che, avendo impostato come pagina base del negozio una pagina da me creata con gallerie prodotti personalizzate, vorrei che oltre a queste non mi venisse visualizzato tutto l’archivio prodotti di woocommerce in automatico…

        Ti ringrazio!

        • federica 3 Giu 2016 at 13:27 #

          Si, con VC io ho risolto creando una pagina shop personalizzata e non mi compaiono gli altri prodotti, ma solo quelli che voglio visualizzare.
          Purtroppo non conosco fusion builder e non so come aiutarti…
          Ecco la pagina per farti capire come ho risolto: http://www.morganaeffect.com/vector-logo-shop/

  7. MASSIMILIANO GIRI 12 Gen 2017 at 17:14 #

    Ciao Roberto e complimenti per il tuo sito 🙂
    Vorrei chiederti una cosa, forse abbastanza stupida: ho un sito e-commerce fatto con woocommerce, ma vorrei impostare come homepage una pagina statica diversa da quella dello shop, e mettere nel menu una voce “shop”. Il problema è che woocommerce mi imposta di default la pagina Shop come homepage e non serve che io metta nelle impostazioni un’altra pagina statica come “home” 🙂 Grazie per il consiglio se avrai voglia di darmelo

    • Roberto Rota 12 Gen 2017 at 19:19 #

      Non capisco il problema.
      WooCommerce imposta la pagina che tu definisci come “pagina negozio” nelle impostazioni del plugin come la home del negozio, ma che non è, e non coincide a meno che tu non lo voglia, con la home del sito, che tu imposti nei settaggi “Lettura” delle preferenze del sito. A meno ovviamente di non impostare la stessa pagina in entrambi i settaggi.
      Nei menu puoi mettere tutte le voci che vuoi.

  8. carlo 12 Apr 2017 at 01:28 #

    Ciao Roberto
    spero tu mi possa aiutare.
    Nella pagina shop vorrei mostrare soltanto i prodotti a prezzo pieno escludendo quelli scontanti che andrebbero in una pagina separata ‘saldi’.
    Come posso fare?
    Grazie in anticipo

  9. karl0 12 Apr 2017 at 16:15 #

    Ciao (grazie per la risposta),
    ho già provato quel sistema, ma con tanti prodotti (un migliaio) è macchinoso, anche utilizzando bulk-edit, e poi viene visualizzata la categoria. Pensavo più a modificare il loop di woocommerce facendogli escludere i prodotti scontati, ma non ho trovato dove mettere le mani

    • Roberto Rota 12 Apr 2017 at 21:29 #

      Più che modificare il loop, tornerebbe più utile un filtro, che forse è un pochino più facile da realizzare.

  10. graffafette 27 Set 2017 at 10:28 #

    Ciao Roberto,
    grazie per l’articolo, capita proprio a fagiolo!

    Ho copiato questo codice nel mio file…

    add_action( ‘pre_get_posts’, ‘custom_pre_get_posts_query’ );

    function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;

    if ( ! is_admin() && is_shop() ) {

    $q->set( ‘tax_query’, array(array(
    ‘taxonomy’ => ‘product_cat’,
    ‘field’ => ‘slug’,
    ‘terms’ => array( ‘wholesale’ ), // Don’t display products in the knives category on the shop page
    ‘operator’ => ‘NOT IN’
    )));

    }

    remove_action( ‘pre_get_posts’, ‘custom_pre_get_posts_query’ );

    }

    … , ma mi dà un messaggio d’errore (Parse error: syntax error, unexpected ‘IN’’ (T_STRING), expecting ‘)’ in /home/cj2db10s/public_html/wp-content/themes/booklovers-child/functions.php on line 44)… cosa sto sbagliando? Forse è cambiato qualcosa? Dopotutto il codice è di più di un anno fa… 🙂

    Grazie mille, chiara

  11. graffafette 27 Set 2017 at 10:30 #

    Il codice era questo…

    add_action( ‘pre_get_posts’, ‘custom_pre_get_posts_query’ );

    function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;

    if ( ! is_admin() && is_shop() ) {

    $q->set( ‘tax_query’, array(array(
    ‘taxonomy’ => ‘product_cat’,
    ‘field’ => ‘slug’,
    ‘terms’ => array( ‘extra’ ), // Don’t display products in the knives category on the shop page
    ‘operator’ => ‘NOT_IN’
    )));

    }

    remove_action( ‘pre_get_posts’, ‘custom_pre_get_posts_query’ );

    }

    (ho modificato con il nome della mia categoria da nascondere dalla pagina shop)

    graaaaazie!

Dubbi o suggerimenti? Lascia un commento!

I love Instagram