WooCommerce: come nascondere categorie prodotti nella pagina shop

Nascondere Prodotti Shop WooCommerce

Aggiornamento articolo originale del 2014

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 9 e sostituire “Nome Categoria” con il nome reale della categoria che si vuole nascondere.

/**
 * Escludere prodotti di particolari categorie dalla pagina shop
 */
function nascondi_categorie_query( $q ) {
    $tax_query = (array) $q->get( 'tax_query' );
    $tax_query[] = array(
           'taxonomy' => 'product_cat',
           'field' => 'slug',
           'terms' => array( 'Nome Categoria' ), 
           'operator' => 'NOT IN'
    );
    $q->set( 'tax_query', $tax_query );
}
add_action( 'woocommerce_product_query', 'nascondi_categorie_query' ); 
Roberto Rota esperto WordPress e WooCommerce

Hai bisogno di aiuto con WooCommerce?

Se hai bisogno di assistenza per il tuo store WooCommerce, o anche solo per mettere in pratica queste istruzioni, contattami!

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 Categoria’,’Nome Categoria 2′,’Nome Categoria 3′)

Snippet testato su WooCommerce 3.5.7
Aggiornamento articolo originale del 2014

Fonte snippet: Documentazione WooCommerce

Tags: , , , , ,

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

  1. Emanuele 31 Mag 2019 at 16:55 #

    Salve Roberto,
    grazie per l’articolo. Mi domando se il codice è aggiornato per l’ultima versione di WP, ho provato ad usarlo così com’è ma non sono riuscito a farlo funzionare. Dovrrei semplicemente nascondere una categoria prodotti e relativi prodotti dalla pagina shop.
    Grazie

    Emanuele

    • Roberto Rota 31 Mag 2019 at 16:58 #

      Ciao Emanuele, con l’ultimissima versione di WC non ho avuto modo di verificare, però sono certo che funzionava con una delle ultime, pochi mesi fa.
      Alla prima occasione verifico.

      • Emanuele 3 Giu 2019 at 10:02 #

        Grazie Roberto,
        attendo tue istruzioni.

        Emanuele

      • Marco 17 Set 2019 at 12:41 #

        ciao anche io ho provato senza successo…

  2. WoodyP 18 Mag 2019 at 09:34 #

    Ciao Roberto,
    io ho una esigenza simile ma diversa.
    Dovrei nascondere alcuni prodotti terminati in woocomemrce.

    So che esiste questa opzione nelle impostazioni, ma nasconde tutti i prodotti terminati, ma a me interessa nascondere solo alcuni di questi, perché non saranno nel catalogo per un po’ di tempo.

    Posso usare questo tuo codice per creare una categoria nascosta, così da assegnargli tutti quei prodotti che non voglio vedere?
    Cosa succede con questi prodotti nei motori di ricerca?
    Oppure ha qualche altro suggerimento?

    • Roberto Rota 19 Mag 2019 at 22:02 #

      Puoi provare ad inserire quei prodotti in una specifica categoria, magari funziona.

      Riguardo i motori di ricerca non cambia nulla, se non specificato diversamente lato SEO vengono indicizzati come tutti gli altri.

      rob

  3. Emanuele 13 Mag 2019 at 17:20 #

    Buongiorno.
    Ho testato il codice è funziona egregiamente. Però se uno ha bisogno di escludere molte categorie diventa macchinoso..non posso capovolgere la domanda e visualizzare solo quelle che mi servono nascondendo le altre?
    Se devo nascondere 15 categorie e visualizzarne una sola…ad esempio

    • Emanuele 13 Mag 2019 at 17:28 #

      Vorrei ampliare la mia richiesta…
      Io ho 15 categorie “prodotto” e una categoria “usato”.
      Utilizzando il codice proposto, per visualizzare solo la categoria “usato” devo escludere le altre 15… pero quando vado in “prodotti” mi dice che non non ha prodotti da visualizzare, mentre invece in usato va bene perchè vedo solo i prodotti “usato”-
      Ho provato a mettere davanti alla costruzione della query una if

      if ( is_product_category( ‘usato’ ) ){ //codice proposto }

      cosi da filtrare la categoria richieste ed eseguire al query di filtro solo se la categoria è quella voluta, ma non funziona (continuo a non vedere gli altri prodotti).
      Mi suggerirebbe qualcosa per cortesia?

    • Roberto Rota 13 Mag 2019 at 18:51 #

      Ciao Emanuele, ora non sono davanti al computer per poter fare delle prove, ma così su due piedi cercherei di lavorare sulla riga ‘operator’ => ‘NOT IN’

      rob

  4. Giancarlo 23 Apr 2019 at 15:22 #

    Ciao, non riesco ad ordinare i prodotto nella pagina shop di WooCommerce. Ho usato la voce “ordina” in tutti i prodotti, ma invano: escono sempre in ordine sparso. In impostazioni – prodotti – non è più presente la voce visualizzazione. Consigli?
    Grazie..

    • Roberto Rota 23 Apr 2019 at 16:05 #

      l’ordinamento dei prodotti è stato spostato sul “Personalizza” (aspetto > Personalizza) e poi WooCommerce > Catalogo prodotti

  5. Rosario 9 Mar 2019 at 10:19 #

    Salve Roberto
    Non sono riuscito in woocommerce ha creare 2 aliquote per la spedizione una gratis con un minimo di ordine gratis un altro a spedizione agevolata. Mi rivolgo alla tua sapienza in merito per risolvere questa soluzione
    Esempio spedizione normale sotto la spesa di 30€ € 5,90
    Spdizione gratis oltre € 59
    Spedizione ridotta oltre 29€ 2,90 € Grazie

    • Roberto Rota 9 Mar 2019 at 14:44 #

      Due aliquote? forse intendi tariffe differenti.
      In tal caso ci sono diversi script e plugin a cui potresti ispirarti.

  6. sara 12 Feb 2018 at 18:47 #

    buonasera,
    Ho un problema, stò cercando do formulare il mio sito, come e-commerce.
    Versione free.
    La parte woocommerce, ho inserito i prodotti nella pagina shop tramite
    [recent_products per_page=”12″ columns=”4″]
    Ma vorrei fossero visibili solo le categorie, è possibile?
    Grazie

    • Roberto Rota 13 Feb 2018 at 11:24 #

      Nelle impostazioni di WooCommerce (spostate nel customizer dall’ultima versione), puoi decidere se mostrare i prodotti, le categorie o entrambi.
      Questo sempre che il tema o qualche altro plugin non intercetti queste funzioni e le faccia proprie.

      • sara 13 Feb 2018 at 11:52 #

        Grazie Roberto, il tema è compatibile, versione aggiornata, ma non mi permette la scelta.
        Quali plugin potrebbero intercettare questa funzione?

        • Roberto Rota 13 Feb 2018 at 12:14 #

          Ciao Sara,
          il fatto che il tema sia dichiarato compatibile e aggiornato non lo elimina dalla lista dei sospettati, alcuni temi interagiscono pesantemente con le opzioni di WooCommerce. Non so se sia il tuo caso ma è difficile verificarlo senza fare un sopralluogo, idem per il discorso di eventuali plugin, ce ne sono troppi che possono interagire/interferire con WooCommerce.

          rob

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

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

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

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

  12. 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/

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

  14. federica 3 Dic 2015 at 12:52 #

    Perfetto!

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

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

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

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Ciao, come posso aiutarti?
Powered by