Filtro WooCommerce: mostra solo gli attributi della categoria corrente
Quando più categorie di prodotti condividono lo stesso attributo, un filtro WooCommerce spesso propone valori privi di senso nella pagina: Grill tra i frigoriferi, 512 GB tra le cuffie, marchi che in questa categoria non si vendono. Un clic su questi valori dà un risultato vuoto. Per far mostrare al filtro WooCommerce solo gli attributi della categoria corrente, HUSKY conta i prodotti dietro ogni termine presente nella pagina e nasconde i termini il cui conteggio è zero. Qui sotto trovi come funziona, le impostazioni esatte, come tenere invisibili i numeri e i casi in cui la categoria non è nota affatto.
Come fa il filtro a sapere cosa appartiene alla categoria corrente
In una pagina di categoria prodotto, e in qualsiasi altro archivio di tassonomia dei prodotti (un tag, un archivio di attributo, un marchio), HUSKY ricorda il termine che la pagina sta mostrando. Con Riconteggio dinamico (Dynamic recount) attivo, il numero accanto a ogni termine del filtro viene calcolato così: prodotti di questa categoria che corrispondono a tutto ciò che il visitatore ha già selezionato e che hanno anche questo termine. Un valore che nessun prodotto della categoria possiede ottiene 0.
Nascondi termini vuoti (Hide empty terms) rimuove poi dal modulo ogni termine con 0. Quando tutti i termini di una sezione vengono rimossi, scompare anche l'intera sezione, titolo compreso, e così un attributo che non viene usato nella categoria sparisce dalla barra laterale. La sezione delle categorie viene ridotta alle sottocategorie della categoria visualizzata; perché il filtro mostra solo le sottocategorie spiega questa parte e le sue eccezioni.
Non bisogna configurare nulla per ogni singola categoria. Lo stesso modulo, inserito in una barra laterale o nel template delle categorie, si adatta da solo a ogni pagina di categoria.
Le tre impostazioni che nascondono i termini vuoti
Apri le impostazioni del plugin, scheda Opzioni (Options), e imposta:
- Mostra conteggio (Show count): Sì
- Riconteggio dinamico (Dynamic recount): Sì
- Nascondi termini vuoti (Hide empty terms): Sì
Salva, poi svuota ogni cache che possa contenere vecchi conteggi: Cache del numero di riconteggio dinamico per ogni elemento nel filtro (Cache dynamic recount number for each item in filter) e Cache dei termini (Cache terms) in Avanzate → Opzioni (Advanced → Options), se le usi, e la cache di pagina del tuo sito.
Le tre opzioni dipendono l'una dall'altra, e la pagina delle impostazioni lo impone: un termine vuoto si può trovare solo contando. Attivando Nascondi termini vuoti (Hide empty terms) si attivano anche le altre due, e disattivando Mostra conteggio (Show count) si disattivano anche le altre due. Se imposti Mostra conteggio (Show count) su No per eliminare i numeri, i termini vuoti tornano in ogni pagina. Le combinazioni possibili:
| Mostra conteggio / Riconteggio dinamico / Nascondi termini vuoti | Cosa vedono i visitatori |
|---|---|
| No / No / No | Tutti i termini, senza numeri |
| Sì / No / No | Numeri riferiti a tutto il negozio; i termini senza alcun prodotto sono in grigio |
| Sì / Sì / No | Numeri per la categoria e la selezione correnti; i termini a zero restano visibili ma in grigio e non si possono selezionare |
| Sì / Sì / Sì | I termini a zero sono nascosti; le sezioni vuote scompaiono |
La terza riga è la scelta giusta quando preferisci mostrare i valori non disponibili come inattivi invece di rimuoverli. Alcuni altri punti possono sovrascrivere le opzioni globali:
- Nella versione gratuita Nascondi termini vuoti (Hide empty terms) e Nascondi il testo del conteggio dei termini (Hide terms count text) (più sotto) sono in grigio; fanno parte della versione premium.
- Il widget del filtro HUSKY ha un proprio campo Riconteggio dinamico (Dynamic recount) (Predefinito (Default), No, Sì (Yes)). Se è impostato su No, quel widget ignora l'impostazione globale. Lo shortcode [woof] ha lo stesso interruttore come
dynamic_recount=1odynamic_recount=0. - Quando la modalità Turbo è attiva, la scheda Opzioni (Options) mostra copie separate di queste tre impostazioni per la modalità Turbo. Impostale di nuovo dopo averla attivata.
- Una tassonomia mostrata come cursore a intervallo non viene riconteggiata dalle opzioni globali. Apri le sue opzioni aggiuntive (l'icona a ingranaggio accanto alla tassonomia nella scheda Struttura (Structure)) e imposta Abilita riconteggio dinamico (Enable dynamic recount) su Sì; i valori senza prodotti vengono allora esclusi dalla scala del cursore.
La documentazione della scheda Opzioni descrive le altre impostazioni della stessa schermata.
Nascondere i termini vuoti senza mostrare il conteggio
Il desiderio più comune è nascondere i termini vuoti senza stampare numeri come (12). Lascia attive tutte e tre le opzioni e vai in Avanzate → Opzioni (Advanced → Options): imposta Nascondi il testo del conteggio dei termini (Hide terms count text) su Sì. Il plugin continua a calcolare i conteggi, che gli servono per sapere cosa è vuoto, ma non li stampa. Per farlo solo in un modulo, aggiungi hide_terms_count=1 al suo shortcode, per esempio [woof hide_terms_count=1].
Nascondere il contatore con il CSS funziona anche per caselle di controllo e pulsanti di opzione (.woof_checkbox_count, .woof_radio_count), ma non per i menu a tendina: lì il numero fa parte del testo dell'opzione e non ha un elemento proprio. L'impostazione copre ogni tipo di filtro.
Per cambiare il contatore solo in alcune sezioni, usa l'hook woof_term_count_format. Riceve il formato, per impostazione predefinita (%d), e lo slug della tassonomia:
/*
* HUSKY: counter format per filter section.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('woof_term_count_format', function ($format, $tax_slug) {
// no numbers at all in the Tags and Brand sections
if (in_array($tax_slug, array('product_tag', 'pa_brand'), true)) {
return '';
}
// "12" instead of "(12)" everywhere else
return '%d';
}, 10, 2);
In quelle sezioni i termini vuoti restano comunque nascosti, perché il nascondimento dipende dal conteggio calcolato, non dal testo stampato. Per mostrare i numeri solo al livello più basso di un albero di categorie, nascondi con il CSS i contatori dei termini che hanno figli (campo CSS personalizzato del tuo tema):
.woof_childs_list_li > .woof_checkbox_label > .woof_checkbox_count {
display: none;
}
Un termine selezionato non mostra mai un numero. È voluto: il riconteggio salta i termini che fanno già parte della ricerca.
Perché gli altri valori scompaiono dopo la prima selezione
Il riconteggio dinamico restringe il modulo a ogni scelta: dopo aver selezionato Marca: Bosch, restano solo i colori che i prodotti Bosch di questa categoria hanno. È proprio questo lo scopo della funzione. Non si può disattivare per una sola sezione.
Un caso diverso è quando scegliere un colore nasconde tutti gli altri colori. Dipende dalla logica della sezione. Apri le opzioni aggiuntive della tassonomia (l'icona a ingranaggio nella scheda Struttura (Structure)) e guarda Logica di filtraggio (Logic of filtering):
- OR (predefinita): prodotti che hanno almeno uno dei valori selezionati. Ogni altro colore viene contato da solo (entro le selezioni delle altre sezioni), quindi i colori presenti nella categoria restano.
- AND: prodotti che hanno tutti i valori selezionati insieme. Il conteggio di ogni altro colore diventa "prodotti che sono rossi e blu allo stesso tempo", di solito 0, quindi con Nascondi termini vuoti (Hide empty terms) spariscono.
- NOT IN: esclude i prodotti con i valori selezionati.
Per colori, taglie e la maggior parte degli attributi in cui il visitatore vuole "questo oppure quello", la logica giusta è OR. Tieni AND per le caratteristiche che devono essere presenti tutte, come "Wi-Fi e Bluetooth".
Per opzioni che si restringono prima che venga caricato qualsiasi prodotto (un selettore fatto di menu a tendina dipendenti), usa [woof ajax_redraw=1 autosubmit=1]: ogni modifica ridisegna solo il modulo con le opzioni riconteggiate, e il pulsante del filtro carica i prodotti. ajax_redraw non è pensato per la modalità AJAX, quindi tieni disattivata Prova a rendere il negozio AJAX (Try to ajaxify the shop) per quel modulo.
Pagina del negozio, pagine personalizzate e page builder
La riduzione automatica richiede un archivio di tassonomia. Altrove non esiste una categoria corrente:
- La pagina principale del negozio mostra l'intero catalogo, quindi finché il visitatore non seleziona qualcosa vengono nascosti solo i valori senza alcun prodotto nel negozio. È il comportamento corretto.
- Una pagina di WordPress (una home, una landing page, una pagina creata con Elementor o Divi che elenca una categoria) non è un archivio di categoria, anche se mostra solo i prodotti di quella categoria. Il filtro non può saperlo e mostra tutto.
In una pagina simile, indica a entrambi gli shortcode di quale categoria si tratta. Usa l'ID del termine da Prodotti → Categorie (Products → Categories):
[woof taxonomies=product_cat:15]
[woof_products taxonomies=product_cat:15 per_page=12]
L'attributo taxonomies di [woof] fa sì che conteggi e nascondimento seguano quella categoria, e lo stesso attributo in [woof_products] limita i prodotti mostrati. Più ID della stessa tassonomia si separano con virgole (product_cat:15,16, prodotti di una qualsiasi delle due), più tassonomie con un segno più (product_cat:15+pa_color:22). Funziona solo con le tre opzioni qui sopra attive. La configurazione completa di queste pagine è in il filtro prodotti in una pagina personalizzata o nella home.
Se ti serve un insieme diverso di sezioni per ogni categoria, e non valori diversi, vedi come mostrare filtri diversi per categoria.
Se il filtro in un vero archivio di categoria si comporta ancora come nella pagina del negozio, il template dell'archivio del tema potrebbe nascondere la categoria corrente al plugin; succede soprattutto con i template a blocchi. In Avanzate → Opzioni (Advanced → Options) imposta Controllo aggiuntivo della pagina di categoria (Additional check of the category page) su Sì.
Un'opzione più leggera senza riconteggio dinamico
Se ti basta nascondere i termini che non hanno prodotti in nessun punto del negozio (vecchie taglie, un marchio che non vendi più), il riconteggio dinamico non serve. Questo snippet chiede a WordPress di saltare tali termini quando HUSKY li carica:
/*
* HUSKY: do not list terms that have no published products at all.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('woof_get_terms_args', function ($args) {
$args['hide_empty'] = true;
return $args;
});
Non costa nulla al caricamento della pagina, ma non conosce la categoria corrente né la selezione del visitatore: una taglia che esiste solo nelle scarpe compare comunque nella categoria delle camicie. Se Cache dei termini (Cache terms) è attiva, svuota la cache dei termini dopo aver aggiunto il codice. La FAQ come nascondere i termini vuoti mostra lo stesso snippet.
Quanto costa il riconteggio dinamico nei cataloghi grandi
Ogni termine del modulo richiede una propria query di conteggio a ogni visualizzazione di pagina, compresi quelli nascosti, quindi un modulo con 300 termini esegue circa 300 query di conteggio. Con poche migliaia di prodotti non si nota; con decine di migliaia può rallentare ogni pagina di categoria. Prima di disattivare la funzione:
- attiva Cache del numero di riconteggio dinamico per ogni elemento nel filtro (Cache dynamic recount number for each item in filter) in Avanzate → Opzioni (Advanced → Options);
- usa
dynamic_recount=0nei moduli in cui la riduzione non serve, per esempio un modulo di ricerca nell'intestazione; - valuta la modalità Turbo, che filtra e conta partendo da un file di dati preparato invece che da query al database.
I dettagli sono in come velocizzare il filtraggio dei prodotti nei cataloghi grandi.
Checklist se compaiono ancora opzioni non pertinenti
- Mostra conteggio (Show count), Riconteggio dinamico (Dynamic recount) e Nascondi termini vuoti (Hide empty terms) sono tutti su Sì (oppure le loro copie della modalità Turbo, se questa è attiva).
- I numeri sono nascosti con Nascondi il testo del conteggio dei termini (Hide terms count text), non impostando Mostra conteggio (Show count) su No.
- Il campo Riconteggio dinamico (Dynamic recount) del widget è Predefinito (Default) o Sì (Yes); nello shortcode non c'è
dynamic_recount=0. - Stai facendo la prova in un vero archivio di categoria, oppure lo shortcode ha
taxonomies=in una pagina personalizzata. - La cache del riconteggio, la cache dei termini e la cache di pagina sono state svuotate dopo la modifica.
- La Logica di filtraggio (Logic of filtering) dell'attributo è OR, se dopo una selezione devono restare anche gli altri valori.
Se tutto questo è a posto e una categoria elenca ancora valori senza prodotti, apri una discussione nel forum di supporto di HUSKY con il link alla pagina della categoria e il valore che dovrebbe essere nascosto.