Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Gli argomenti di WP_Query: Post, pagine e post type

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: Properties and Methods
WP_Query Arguments: Categories and Tags

Italian (Italiano) translation by Roberta C (you can also view the original English article)

In questa parte di questa serie su WP_Query, imparerete come utilizzare WP_Query per eseguire query sui post, pagine e tipi di post personalizzati. È possibile eseguire query per specifici post e pagine oppure eseguire una query per restituire tutti i messaggi di uno o più tipi di post personalizzati.

Un riepilogo su come gli argomenti funzionano in WP_Query

Prima di iniziare, diamo un breve riepilogo sul funzionamento degli argomenti in WP_Query. Quando si codifica WP_Query in temi o plugin, è necessario includere quattro elementi principali:

  • gli argomenti per la query utilizzando i parametri che saranno trattati in questo tutorial
  • la query stessa
  • il loop
  • per finire: chiusura dei tag if e while e ripristino dei dati del post

In pratica avrà un aspetto simile al seguente:

Gli argomenti sono quelli che dicono ad WordPress quali dati recuperare dal database e sono quelli che tratterò qui. Così tutti ci stiamo concentrando sulla prima parte del codice:

Come potete vedere, gli argomenti sono contenuti in un'array. Potrai imparare a codificarli attraverso questo tutorial.

Codifichiamo i nostri argomenti

C'è un modo specifico per codificare gli argomenti in un array, che è questo:

È necessario racchiudere i parametri e i valori tra virgolette singole, usare => tra loro e separarli con una virgola. Se si fa in maniera sbagliata, WordPress potrebbe non aggiungere tutti gli argomenti per la query o si potrebbe ottenere uno schermo bianco.

Esecuzione di query per singoli post o pagine

Cominciamo con lo scenario più semplice: eseguire una query per trovare uno specifico post o pagina.

L'esecuzione di una query per un Post

Per trovare un post specifico (o un insieme di post), avete due opzioni:

  • p (int): usare post ID.
  • name (stringa): usare il post slug.

È possibile utilizzare questi parametri con qualsiasi tipo di post compresi post, pagine, allegati e custom post type. Di default WordPress esegue una query per il tipo di post 'post' e non restituisce pagine o custom post type — se si vuole fare questo avremo bisogno di aggiungere ulteriori argomenti o utilizzare un argomento differente, che vedremo più avanti in questo tutorial.

Così, per restituire uno specifico post si utilizzerà uno di questi:

oppure:

Si noti che il parametro name prende lo slug del post come argomento, non il titolo.

Utilizzando il parametro name si rende più facile identificare ciò che la query recupererà dal database quando si rivede il codice in un secondo momento, ma c'è il rischio che non funzioni se uno degli utenti del sito cambia lo slug del post. L'ID del post non può essere modificato ed è quindi più sicuro.

Eseguire la query per una pagina

Per eseguire una query per una pagina specifica ci sono due opzioni:

  • page_id (int): utilizza l'ID di pagina.
  • pagename (stringa): usa lo slug della pagina.

Così, per eseguire una query per il recupero di una sola pagina specifica dal database, si utilizzerà uno di questi:

oppure:

Eseguire la query per un post di un altro tipo

Per eseguire una query per un post di altro tipo, tra cui un custom post type, è possibile usare il parametro post_type. Tratterò questo un po' più in dettaglio più avanti in questo tutorial, ma in breve, per eseguire una query per un singolo post del custom post type product, si userebbe questo:

O per eseguire una query di un allegato, si utilizzerebbe:

Esecuzione di query per pagine figlie

A volte potrebbe essere necessario recuperare tutte le pagine che sono figlie di una determinata pagina, ad esempio se il sito ha una struttura gerarchica di pagine e si desidera visualizzare un elenco in ogni pagina figlia di una specifica pagina.

Nota: Non fate questo con post non gerarchici, si può fare con un custom post type se è gerarchico.

Ci sono tre argomenti che è possibile utilizzare per eseguire questa operazione:

  • post_parent (int): utilizza l'ID di pagina per restituire solo pagine figlie. Impostato su 0 per restituisce solo le voci di primo livello
  • post_parent__in (array): utilizza un array di ID di post.
  • post_parent__not_in (array): utilizza un array di ID di post.

Diamo un'occhiata a ciascuno di loro.

Il primo, post_parent, consente di ricercare le pagine che sono figlie di una determinata pagina.

Così per trovare tutte le pagine che sono figlie di una determinata pagina, bisogna utilizzare questo:

Si noti che è necessario includere l'argomento post_type come tipo post predefinito perché WP_Query cerca solo sono post.

Portandolo un po' avanti, questo è cosa si dovrebbe utilizzare per trovare pagine figlie della pagina corrente:

È inoltre possibile utilizzare questo parametro per identificare le pagine di livello superiore, vale a dire quelle senza un genitore:

Ma cosa succede se si desiderano identificare i figli di più pagine? È possibile farlo, con il parametro post_parent__in. Questo richiede un array di ID di post.

Così per eseguire la query per i figli di due delle nostre pagine, useremo questo:

È inoltre possibile escludere pagine figlie dalla query, utilizzando il parametro post_parent__not_in:

Eseguire query per post multipli

È comune eseguire una query per includere o escludere più post. Si dispone di due argomenti che è possibile utilizzare per questo:

  • post__in (array): usa l'ID del post.
  • post not_in (array): usa l'ID del post.

L'argomento post__in può essere utilizzato per tutti i tipi di post e accetta un  array di ID. Quindi per restituire un elenco di posti specifici, utilizziamo questo:

Nota: Se si utilizza questo argomento per recuperare post, WordPress ancora preleverà post in evidenza, anche se non sono presenti nell'elenco. Per ometterli, si utilizza l'argomento ignore_sticky_posts:

L'argomento post not_in funziona in modo simile, prendendo nuovamente un array di ID di post, ma restituirà tutto tranne i posti elencati. Sarebbe normale combinarlo con altri argomenti per evitare l'output un elenco enorme di post.

Quindi per eseguire una query per tutti post del custom post type product ma escluderne alcuni:

Quindi unire questo con uno dei nostri esempi precedenti, ecco come si potrebbe eseguire una query per tutte le pagine di livello superiore esclusa quella corrente:

Si noti che se abbiamo registrato anche un tipo di post gerarchico, è necessario includere il parametro post_type in questo codice per eseguire la query solo per le pagine.

Eseguire una query per tipi di post

In alcuni degli esempi precedenti abbiamo usato il parametro post_type per identificare tutti i post di un certo tipo. Diamo un'occhiata agli argomenti che è possibile utilizzare con tale parametro:

  • post: un post.
  • page: una pagina.
  • revision: una revisione.
  • attachment: un allegato.
  • nav_menu_item: una voce del menu di navigazione.
  • any: Recupera qualsiasi tipo ad eccezione delle revisioni e dei tipi con 'exclude_from_search' impostata su true quando essi sono stati registrati.
  • Custom post type (ad es. product).

Come abbiamo visto sopra è possibile utilizzare questo parametro con altri argomenti per rendere più specifica la query.

Quindi, per fare un semplice esempio, ecco come si dovrebbe eseguire una query per tutte le pagine del tuo sito:

Custom Post Type

L'esecuzione di query per un custom post type è semplice: usare il nome usato per la registrazione e non il titolo che è utilizzato nel menu admin. Quindi diciamo che abbiamo registrato il custom post type product utilizzando register_post_type() come segue:

Il valore che si utilizza per l'argomento post_type durante la ricerca di prodotti non è 'Product'  o 'Products' ma 'product':

Allegati

Per impostazione predefinita se si tenta di eseguire una query per gli allegati non funzionerà, in quanto WordPress imposta il post_status degli allegati come inherit e WP_Query di default 'post_status', => 'publish', a meno che non venga specificato diversamente. Così se si desiderano eseguire query per gli allegati è necessario includere l'argomento post_status:

Si noti che è possibile anche utilizzare any invece di inherit.

Riepilogo

Utilizzare WP_Query per creare query personalizzate per tutti i post e tipi di post è qualcosa che faccio spesso. Come si è visto dagli esempi qui, ci sono un sacco di possibilità:

  • Utilizzarlo per eseguire una query per pagine di livello superiore nel vostro sito.
  • Utilizzarlo per eseguire una query per tutti i post di un tipo di post specifico.
  • Utilizzarlo per eseguire una query per tutti i post tranne quelli specificati.
  • Utilizzarlo per eseguire una query di tutte le pagine figlie di quella corrente.

Ci sono molte più possibilità utilizzando gli argomenti descritti qui, ma questo dovrebbe darvi un assaggio.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.