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' );
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
48 risposte
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?
Ciao Simone, come hai potuto vedere lo snippet è un po’ datato, magari ha bisogno di essere rivisto.
Appena ho un attimo lo controllo.
rob
Anche io cerco la stessa “soluzione”….
Nell’ultimissima versione di WC al posto del nome categoria va inserito lo slug della categoria.
Ciao Andrea, grazie per l’indicazione, la terrò presente appena riesco a revisionare l’articolo!
rob
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
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.
Grazie Roberto,
attendo tue istruzioni.
Emanuele
ciao anche io ho provato senza successo…
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?
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
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
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?
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
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..
l’ordinamento dei prodotti è stato spostato sul “Personalizza” (aspetto > Personalizza) e poi WooCommerce > Catalogo prodotti
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
Due aliquote? forse intendi tariffe differenti.
In tal caso ci sono diversi script e plugin a cui potresti ispirarti.
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
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.
Grazie Roberto, il tema è compatibile, versione aggiornata, ma non mi permette la scelta.
Quali plugin potrebbero intercettare questa funzione?
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
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!
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
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
Più che modificare il loop, tornerebbe più utile un filtro, che forse è un pochino più facile da realizzare.
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
La prima cosa che mi viene in mente, da provare.
Assegni ai prodotti scontati una particolare categoria, e usi queste istruzioni per non mostrare tale categoria dalla pagina shop: https://docs.woocommerce.com/document/exclude-a-category-from-the-shop-page/
rob
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
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.
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
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
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 😉
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
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!
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/
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’ );
}
Ciao Lorenzo, ti ringrazio per il feedback farò dei controlli prima possibile
rob
Perfetto!
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
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
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!
Potrebbe essere una via percorribile, anche se troverei più efficace predisporre una pagina principale dello store ad-hoc.
rob
In che senso? Indirizzando a monte verso le due collezioni e creando due pagine ad hoc diverse che mostrino ognuna la categoria scelta? Grazie!
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.
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..
Ciao Roberto,
Ho provato ad inserire la tua funzione in function php ma mi da errore, come posso risolvere?
Grazie
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