Creare query su WordPress per filtrare post, esempi pratici

La possibilità di creare query su WordPress estende ulteriormente le sue potenzialità. Esistono vari metodi per filtrare i risultati. Oltre a quello di base che utilizza WordPress si possono utilizzare queste funzioni:

  • query_posts();
  • WP_Query();
  • get_posts();

In questo articolo non mi interessa spiegare nel dettaglio come utilizzare ognuna di queste funzioni, in internet si trovano molte guide e questo link è un ottimo inizio. Mi interessa invece fare degli esempi di utilizzo pratico, con le soluzioni a problemi che mi è capitato di dover risolvere.

In ogni caso è opportuno ricordare le strutture di base di queste funzioni. La struttura di base per utilizzare query_post è:

dalla documentazione ufficiale che si trova in questo link si legge: “query_posts() è il metodo più semplice, anche se non quello preferibile o più efficiente, per modificare la query standard che WordPress utilizza per visualizzare gli articoli. Utilizzare query_posts() per visualizzare articoli diversi da quelli che appaiono normalmente per una specifica URL.”. Anche se in questo esempio utilizzo query_post() una volta determinati gli argomenti della query nulla vieta di usare WP_Query() o get_post().

La struttura base per WP_Query è:

e la struttura base per get_posts è:

Quando si lavora con le query, per il debug, può essere utile visualizzare il contenuto con:

altra considerazione prima di iniziare con gli esempi; Wordpress esegue sempre delle query, quelle che si vanno ad impostare manualmente possono sostituire quelle di default

oppure possono concatenarsi a quelle di defaul

Primo esempio: utilizzare query_post per filtrare post da categorie singole o multiple

Sarà necessario passare alla query i parametri corretti in base ai dati che vogliamo estrarre. Per visualizzare la categoria i parametri da utilizzare sono:

  • cat – intero – id di categoria.
  • category_name – stringa – slugdi categoria.
  • category__and – array – id di categoria.
  • category__in – array – id di categoria.
  • category__not_in – array – id di categoria.

questa query filtra tutti i post con categoria id = 25 e li ordina in base alla data

questa query filtra tutti gli articoli con categoria id= 371 o id=373 o id=374 e visualizza tutti i risultati,

con questa query si ottiene lo stesso risultato della riga precedente

questa query filtra tutti gli articoli ed esclude quelli con categoria id= 371 o id=373 o id=374 e visualizza cinque risultati

un altro metodo per passare i parametri a query_string è utilizzare gli array, vediamolo con un esempio:

questa query filtra tutti gli articoli e visualizza quelli con tag=tag_slug1, tag=tag_slug2, tag=tag_slug3 ma anche con categoria= category_slug1 e categoria= category_slug2, ed esclude quelli con categoria= category_slug_esclu4, quindi miscela tag con categorie. In questo esempio volendo utilizzare contemporaneamente più tassonomie è stato introdotto tax_query che accetta un array di parametri di array di argomenti di tax query.

Secondo esempio: utilizzare query_post per filtrare post da custom fields (campi personalizzati)

Creare campi personalizzati all’interno di WordPress è molto semplice specialmente se si utilizza Advanced Custom Fields . Dopo aver creato i campi personalizzati può essere utile creare delle pagine che permettono di filtrare i contenuti proprio in base a uno o più campi personalizzati. Ammettiamo di aver creato un campo campopersonalizzato che ha come slug slugcampo.

in questo esempio la quey filtra nove post ordinati per data che hanno un valore 1 associato al campo personalizzato

in questo esempio la query filtra 10 post che hanno un valore che contiene (uso di like) xyz nel campo personalizzato

in questo caso la query filtra cento post ordinati per data (parametro di default di orderby) che hanno come valore del primo campo personalizzato x1x oppure (deriva da relation impostato su OR, diversamente l’impostazione di default è AND) che hanno come valore del secondo campo value1. Adesso è stato introdotto meta_query che è da usare quando si vogliono filtrare post con parametri multipli di campi personalizzati.

Come puoi notare la struttura per filtrare le tassononie (categorie, tag,..) è identica alla struttura per filtrare i campi personalizzati.

Terzo esempio: filtrare post da tassonomie e/o custom fields (campi personalizzati)

Questo è sicuramente uno dei casi più difficili da risolvere in quanto non esistono funzioni di default che permetto di filtrare post o da categorie o da campi personalizzati. La soluzione però esiste e la trovi in questo link. Devi creare una nuova una classe che verrà poi richiamata dal codice che genera la query. la struttura semplificata è questa

In sostanza, la classe modifica la funzione la parte della funzione di WordPress WP_Query che definisce WHERE utilizzando le funzioni get_meta_sql() e get_tax_sql(). Questo è il codice della classe da copiare nel file function.php del tema di WordPress. Con questa classe si introduce il nuovo parametro meta_or_tax:

con il parametro meta_or_tax impostato su false la query viene eseguita con le impostazioni di default AND tra tax_query e meta_query

con il parametrometa_or_tax impostato su true la query viene eseguita con OR al posto di AND tra tax_query e meta_query

ora l’esempio pratico per filtrare tax_query e meta_query

in questa query vengono filtrati tutti i post con id categoria 389, 390 e 391 oppure tutti i post con campo personalizzato area_azione che contiene un valore pari a innova

Quarto esempio: gestione di sticky post nelle query su WordPress

Gli sticky post sono i post in evidenza, per approfondire l’argomento come sempre si può approfondire nella https://codex.wordpress.org/Sticky_Posts.

Per impostare le query in modo da estrarre solo gli sticky post si può usare

questa query sovrascrive la query di default, se invece si vuole fare in modo che in una query qualsiasi vengano estratti anche gli sticky post si può usare

per finire se si vogliono escludere gli sticky post dal loop predefinito si può usare

Dopo avr visto questa carrellata di esempi per creare query su WordPress concludo con l’elenco dei parametri che è possibile utilizzare, il dettaglio completo si trova sempre nella documentazione ufficiale

Altri parametri che si possono utilizzare per la gestione delle query

Parametri Autore

Visualizza gli articoli associati ad un determinato autore.

  • Author – intero – id autore
  • author_name – stringa – ‘user_nicename’

Parametri dei tag

Mostra gli articoli associati a determinati tag.

  • tag – stringa – slug del tag
  • tag_id – intero – id del tag
  • tag__and – array – id dei tag
  • tag__in – array – id dei tag
  • tag__not_in – array – id dei tag
  • tag_slug__and – array – slug dei tag
  • tag_slug__in – array – slug dei tag

Parametri di tassonomia

Mostra gli articoli associati a determinate tassonomie

  • {tax} – stringa – abbreviazione tassonomia, deprecata dalla Version 3.1
  • tax_query – array – paramentri tassonomia (dalla Version 3.1)
    • taxonomy – stringa – tassonomia
    • field – stringa – temine della tassonomia (‘id’ o ‘slug’)
    • terms – intero/stringa/array – termini tassonomia
    • include_children – booleano – indica se includere o meno i figli, predefinito true
    • operator – stringa – operatore di verifica, ‘IN’, ‘NOT IN’, ‘AND’

Parametri di ricerca

Visualizza gli articoli in base ad un termine di ricerca

  • s – stringa – parola chiave

Parametri Tipo

Visualizza gli articoli associati a specifici tipi di articolo.

  • post_type – stringa / array) – utilizza i tipi di articolo, valore predefinito ‘post’;
    • post‘ – articolo
    • page‘ – pagina
    • revision‘ – revisione
    • attachment‘ – allegato
    • any‘ – tutti i tipi
    • Custom Post Types personalizzato

Parametri di stato

Visualizza articoli in base a determinati tipi di stato

  • post_status – stringa/array – recupera gli articoli in base al Post Status
    • publish‘ – articolo o una pagina pubblicati
    • pending‘ – articolo in attesa di revisione
    • draft‘ – articolo con lo stato di bozza
    • auto-draft‘ – articolo appena creato
    • future‘ – articolo da pubblicare in futuro
    • private‘ – visibile agli utenti autenticati
    • inherit‘ – revisione
    • trash‘ – articolo nel cestino
    • any‘ – recupera qualsiaso tipo

Parametri di paginazione

  • Nopaging – booleano – visualizza tutti gli articoli o utilizza la paginazione
  • posts_per_page – intero – numero di articoli da visualizzare per ciascuna pagina, con -1 mostra tutti gli articoli
  • offset – intero – numero di articoli da scartare o ignorare
  • Paged – intero – visualizza gli articoli che appaiono nella pagina X
  • posts_per_archive_page – intero – numero di articoli da mostrare per ciascuna pagina

Parametri Order & Orderby

Ordinamento degli articoli

  • order – stringa – ordinamento ascendente o discendente del parametro ‘orderby’, predefinito ‘DESC’
    • ASC‘ – ordine ascendente dal valore più piccolo
    • DESC‘ – ordine discendente dal valore più grande
  • orderby – stringa – articoli recuperati in base al parametro, predefinito ‘date’
    • none‘ – nessun ordinamento
    • ID‘ – ordina per id articolo
    • author‘ – ordina per autore
    • title‘ – ordina per titolo
    • name‘ – ordina slug articolo
    • date‘ – ordina per data
    • modified‘ – ordina per data di ultima modifica
    • parent‘ – ordina in base all’id dell’articolo/pagina genitore
    • rand‘ – ordina casualmente
    • comment_count‘ – ordina in base al numero dei commenti
    • menu_order‘ – ordina in base all’ordinamento pagina
    • meta_value‘ – il valore della chiave
    • meta_value_num‘ – ordinamento per valori numerici dei metadati
    • post__in‘ – mantiene l’ordine indicato degli ID fornito con l’array post__in array

Parametri articolo in evidenza

Mostra articoli in evidenza o li ignora.

  • ignore_sticky_posts – booleano – ignora gli articoli in evidenza (false) o no (true)

Parametri di tempo

Mostrare gli articoli associati ad un certo periodo di tempo.

  • Year – intero – anno a 4 cifre
  • monthnum – intero – numero del mese
  • w – intero – settimana dell’anno
  • Day – intero – giorno del mese
  • hour – intero – ora
  • minute – intero – minuto
  • second – intero – secondo

Parametri campi personalizzati

Mostrare articoli associati a determinati campi personalizzati

  • meta_key – stringa – chiave del campo personalizzato
  • meta_value – stringa – valore del campo personalizzato
  • meta_value_num – numero – valore del campo personalizzato
  • meta_compare – stringa – operatore di confronto, i possibili valori sono ‘!=’, ‘>’, ‘>=’, ‘<‘ o ‘<=’. Il valore predefinito è ‘=’
  • meta_query – array – parametri del campo personalizzato
    • key – stringa – campo personalizzato
    • value – stringa|array – valore del campo personalizzato
    • compare – stringa – operatore di test
    • type – stringa – tipo di campo personalizzato

Parametri sui permessi

  • perm – stringa – permessi utente

Parametri di cache

Impedisce che i dati recuperati vengano aggiunti alla cache

  • cache_results – booleano – cache sulle informazioni degli articoli
  • update_post_meta_cache – booleano – cache sulle informazioni dei metadati degli articoli
  • update_post_term_cache – booleano – cache sulle informazioni dei termini associati agli articoli


That's all folks!
Contenuto bloccato, acconsenti all'uso dei cookie.
Contenuto bloccato, acconsenti all'uso dei cookie.