Cerca

WooCommerce: come nascondere categorie prodotti nella pagina shop

Prodotti shop WooCommerce
Prodotti shop WooCommerce

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

Condividi se ti è piaciuto!

Altri articoli che potrebbero interessarti:

Picture of Roberto Rota

Roberto Rota

Libero professionista, un "artigiano del web", lavoro nella comunicazione in rete da quando esiste Internet. Mi occupo principalmente di assistenza su WordPress e assistenza e consulenza WooCommerce, seguo la realizzazione di progetti web, in particolare siti di e-commerce, visibilità e comunicazione in rete. Il mio curriculum è su Linkedin, e mi puoi trovare anche su Instagram, FaceBook e Twitter.

DAI IL TUO CONTRIBUTO

Se il mio lavoro ti è stato di aiuto, contribuisci alla continuità di questo sito.
Basta una piccola donazione su PayPal, una pizza e una birra alla tua salute!

48 risposte

  1. Buongiorno,

    con questo codice vengono eliminati i prodotti dalla pagina shop, archivio prodotti è vero.
    Il problema è che vengono eliminati i prodotti anche dalla pagina della stessa categoria, quindi, se volessi nascondere i prodotti dallo shop e creare una pagina con quella categoria nella quale appaiano i prodotti, con questo codice non è possibile farlo.
    Avete per favore una soluzione a questo?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  14. 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’ );

    }

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

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

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

          1. 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. Ciao Roberto,

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

    Grazie

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

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

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