escludere categorie dal loop di wordpress

Sebbene alcune pagine di archivio si trovino allo stesso livello gerarchico e abbiano la stessa importanza per il progetto di comunicazione del sito, per motivi editoriali potremmo trovarci talvolta a valutare l’esclusione di una o alcune di esse dal loop, ossia la parte dinamica che mostra tutti gli articoli insieme. Avete presente un comunissimo blog dove scrollando trovate tutti i post dal più recente al meno recente? Ecco, quello è il loop.

Esempio

Però in questo esempio il blog è un blog personale che parla soprattutto ricette (quindi immaginiamo che esista una categoria “ricette”), tra le quali l’autore ha però scelto di inserire ogni tanto anche qualche post con le sue considerazioni sullo yoga (e quindi aggiungiamo all’esempio anche categoria “yoga”), l’altra sua grande passione.

Diciamo anche che l’homepage del suo sito è configurata per mostrare indifferente tutti gli articoli presenti, ordinandoli in base alla data di pubblicazione, perciò il lettore troverà mescolate nel loop tante ricette e qualche riflessione sullo yoga.

Questo mix potrebbe non solo essere un limite di pertinenza all’intero di un discorso SEO, ma anche una cosa poco gradita dallo stesso blogger, che magari vorrebbe tenere lo yoga un po’ più ai margini, presentandosi a chi arriva sul sito per la prima volta soprattutto come un esperto di ricette. Deve perciò trovare il modo di limitare gli articoli presenti nell’homepage ai soli appartenenti alla categoria “ricette”, escludendo perciò la categoria “yoga” dal loop.

Vediamo allora come fare.

Escludere una o più categorie dal loop via codice

Come al solito, per una situazione del genere si può utilizzare anche un plugin (ad esempio c’è “Ultimate Category Excluder” che è persino gratuito), ma in base alla mia esperienza è sempre meglio ridurre l’uso dei plugin allo stretto necessario, per evitare problemi di velocità di caricamento, compatibilità e persino sicurezza.

Consideriamo inoltre che il codice per escludere una categoria dal loop di WordPress è estremamente breve e semplice, non richiede chissà quale competenza (ma attenzione e precisione sì!) e perciò in questo caso l’operazione può essere svolta anche dai più volenterosi tra i meno esperti! 🙂

Come al solito, quando andiamo ad operare in questo modo, si tratta di inserire una porzione di codice all’interno del file functions.php del tema attivo su wordpress, anche se in realtà  procedura migliore sarebbe farlo nel file functions.php tema child, così da non perdere e ricreare questa funzione ad ogni nuovo aggiornamento del template.

Il codice da inserire per escludere una singola categoria dal loop principale è:

function exclude_category_home( $query ) {
if ( $query->is_home ) {
$query->set( 'cat', '-5' );
}
return $query;
}

add_filter( 'pre_get_posts', 'exclude_category_home' );

Osservando il codice, notiamo che c’è un numero, 5, che indica l’ID della singola categoria che nell’esempio si vuole escludere. È sufficiente sostituirlo con l’ID della categoria che fa al caso nostro (nell’esempio la categoria “yoga”) e questa verrà esclusa dal loop in homepage.

Nel caso in cui le categorie da escludere siano diverse, invece, dobbiamo usare nel file functions.php un codice leggermente diverso, e cioè:

function exclude_category_home( $query ) {
if ( $query->is_home ) {
$query->set( 'cat', '-5, -9, -23' );
}
return $query;
}
 
add_filter( 'pre_get_posts', 'exclude_category_home' );

In questo caso notiamo che gli ID richiamati nel codice sono 3 (5, 9 e 23) per cui sono 3 le categorie che andremo a escludere. Questo esempio va adattato al caso specifico sia gestendo il numero delle categorie da escludere, sia sostituendo infine gli ID di categoria con quelli appropriati.

2020-09-11

Lascia un commento

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