In questa serie su WP_Query
, hai imparato a usare il WP_Query
classe per creare query personalizzate nei file del tema o nei plugin.
Questa parte della serie ti guiderà attraverso gli argomenti che puoi utilizzare per creare query di data semplici e complesse, per pubblicare post pubblicati su, prima, dopo o tra date date.
Ti mostrerò quali parametri sono disponibili e come usarli per scrivere le tue domande. Ma prima, un promemoria su come funzionano gli argomenti WP_Query
.
Prima di iniziare, facciamo un rapido riassunto su come funzionano gli argomenti WP_Query
. Quando si codifica WP_Query
nei temi o nei plugin, è necessario includere quattro elementi principali:
In pratica questo sarà simile al seguente:
have_posts ()) // Inizia il ciclo sui risultati della query. while ($ query-> have_posts ()) $ query-> the_post (); // I contenuti dei risultati dei post interrogati vanno qui. // Ripristina i dati del post originale. wp_reset_postdata (); ?>
Gli argomenti sono ciò che dice a WordPress quali dati recuperare dal database e sono quelli che coprirò qui. Quindi tutto ciò su cui ci stiamo concentrando qui è la prima parte del codice:
$ args = array (// Argomenti per la tua query.);
Come puoi vedere, gli argomenti sono contenuti in un array. Imparerai come codificarli mentre lavori attraverso questo tutorial.
Coding Your Arguments
Esiste un modo specifico per codificare gli argomenti nell'array, che è il seguente:
$ args = array ('parameter1' => 'value', 'parameter2' => 'value', 'parameter3' => 'value');
È necessario includere i parametri e i relativi valori tra virgolette singole, utilizzare =>
tra di loro e separarli con una virgola. Se si sbaglia, WordPress potrebbe non aggiungere tutti i tuoi argomenti alla query o si potrebbe ottenere una schermata bianca.
È inoltre possibile utilizzare i parametri per richiedere i post con una data di pubblicazione in una determinata data. Puoi essere specifico come vuoi con le date, usando anni e mesi per esempio per recuperare un numero di post.
Puoi scrivere un semplice insieme di argomenti o puoi usare date_query
per creare array annidati ed eseguire query più complesse. Iniziamo con gli argomenti più semplici.
I parametri che è possibile utilizzare per eseguire una query in base alla data sono:
anno
(int): Anno a quattro cifre (ad es. 2015
).monthnum
(int): Numero del mese (da 1
a 12
).w
(int): Settimana dell'anno (da 0
a 53
). La modalità dipende dal "Start_of_week"
opzione che puoi modificare nella pagina Impostazioni nell'amministratore.giorno
(int): Giorno del mese (da 1
a 31
).ora
(int): Ora (da 0
a 23
).minuto
(int): Minuto (da 0
a 60
).secondo
(int): Secondo (0
a 60
).m
(int): YearMonth (ad es. 201.502
).Immagina quindi che tu stia eseguendo un sito di eventi che utilizza la data di pubblicazione per ciascun evento per indicare la data di inizio dell'evento. Per voler visualizzare tutti gli eventi, passati e futuri, che si verificano nel 2015, ecco gli argomenti di cui avresti bisogno:
$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'year' => '2015');
Nota che ho usato futuro
e pubblicare
per lo stato del post, poiché i post pianificati per una data futura non vengono interrogati per impostazione predefinita.
Oppure, se volevi visualizzare automaticamente eventi che si verificano quest'anno e non aggiornare la tua query ogni anno, potresti prima ottenere l'anno corrente e poi passarlo negli argomenti della query:
$ current_year = the_date ('Y'); $ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'year' => $ current_year);
Per utilizzare più parametri di data per creare query più complesse, utilizzare date_query
parametro. Questo ti dà accesso a più parametri:
anno
(int): Anno a quattro cifre (ad es. 2015
).mese
(int): Numero del mese (da 1
a 12
).settimana
(int): Settimana dell'anno (da 0
a 53
).giorno
(int): Giorno del mese (da 1
a 31
).ora
(int): Ora (da 0
a 23
).minuto
(int): Minuto (da 0
a 59
).secondo
(int): Secondo (0
a 59
).dopo
(stringa / array): Data per recuperare post dopo. prima
(stringa / array): Data per recuperare i post prima. inclusivo
(booleano): Per dopo / prima, se il valore esatto debba essere abbinato o meno.confrontare
(stringa): Un operatore che usi per confrontare i dati nel database con i tuoi argomenti. I valori possibili sono '='
, '! ='
, '>'
, '> ='
, '<'
, '<='
, 'PIACE'
, 'NON COME'
, 'NEL'
, 'NON IN'
, 'FRA'
, 'NON IN MEZZO'
, 'Esiste'
, e 'NON ESISTE'
.colonna
(stringa): Colonna del database su cui eseguire la ricerca: il valore predefinito è 'data di pubblicazione'
.relazione
(stringa): O
o E
, come confrontare i sotto-array L'impostazione predefinita è E
.Il date_query
parametro è formattato in questo modo:
$ args = array ('date_query' => array (array (// Argomenti andare qui.)));
È inoltre possibile creare più matrici e definire il modo in cui verranno confrontati utilizzando il parametro di relazione. L'esempio seguente restituirà le query che corrispondono agli argomenti in entrambi gli array:
$ args = array ('date_query' => array ('relation' => 'AND', array (// Argomenti vanno qui.), array (// Argomenti vanno qui.)));
Mentre il codice seguente recupera i post che corrispondono agli argomenti in entrambi gli array (o entrambi):
$ args = array ('date_query' => array ('relation' => 'OR', array (// Argomenti vanno qui.), array (// Argomenti vanno qui.)));
Illustriamo questo con un esempio. Supponiamo che tu stia lavorando su un sito web del college e desideri visualizzare post di questo anno accademico. L'anno accademico va dal 1 settembre 2014 al 31 agosto 2015, quindi dovrai trovare post nei mesi e negli anni pertinenti:
$ args = array ('date_query' => array ('relation' => 'OR', array ('year' => '2014', 'month' => ('9, 10, 11, 12')), array ('year' => '2015', 'month' => ('1, 2, 3, 4, 5, 6, 7, 8'))));
Si noti che il mese
parametro prende una stringa per i suoi argomenti, non una matrice.
Un'alternativa all'esempio di cui sopra è quella di definire le date prima e / o dopo le quali si desidera visualizzare i messaggi, utilizzando il comando prima
e dopo
parametri. Questi prendono tre argomenti:
anno
(stringa): Accetta qualsiasi anno a quattro cifre: vuoto per impostazione predefinita.mese
(stringa): Il mese dell'anno (1
a 12
). L'impostazione predefinita è 12
.giorno
(stringa): Il giorno del mese (1
a 31
). L'impostazione predefinita è l'ultimo giorno del mese.Puoi anche usare una stringa per la data, purché sia compatibile con il php strtotime
formato.
Quindi, tornando al mio esempio di mostrare post per questo anno accademico, ho altre due opzioni. In primo luogo, potrei usare un array annidato con i parametri dell'anno e del mese:
$ args = array ('date_query' => array ('relation' => 'AND', array ('after' => array ('year' => '2014', 'month' => '9'), ' inclusive '=> true), array (' before '=> array (' year '=>' 2015 ',' month '=>' 8 '),' inclusive '=> true)));
Ci sono un paio di cose da notare qui:
'relazione' => 'E'
perché i post devono essere stati pubblicati dopo la mia data di inizio e prima della mia data di fine.'inclusive' => true
per garantire che WordPress recuperi i post pubblicati nel settembre 2014 e nell'agosto 2015.Potrei anche scrivere questa query usando una stringa per le date:
$ args = array ('date_query' => array (array ('after' => 'August 31st, 2014', 'before' => '1 settembre 2015', 'inclusive' => false,)));
Si noti che a causa del modo in cui le stringhe di data funzionano, è più affidabile utilizzare date esclusive. Questo perché se si utilizza una stringa di data, questo verrà convertito in 00:00 in quella data. Quindi, per farlo funzionare, usa anche il tempo nella tua stringa, oppure fai quello che ho fatto e usa il giorno prima la data in cui vuoi mostrare i post (e dopo la data in cui vuoi mostrare i post fino a).
Qualcos'altro che puoi fare con i parametri della data sono i messaggi pubblicati oggi. Tornando al mio sito degli eventi, diciamo che voglio mostrare un grande banner sulla mia home page nel giorno in cui sta accadendo un evento. Posso scrivere una query per questo e quindi restituire i dettagli dell'evento se ne viene trovato uno. Ecco gli argomenti:
$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'date_query' => array (array ('year' => date ('Y') , 'month' => date ('M'), 'day' => date ('D'))));
Usando il Data()
la funzione restituisce la data corrente: ho usato questo tre volte per assicurarmi di ottenere il giorno, il mese e l'anno corretti. Nota che ho incluso anche il post_status
argomento per garantire che un evento che si verifica più tardi oggi sia incluso.
A volte non vuoi solo interrogare tutti i post pubblicati. Usando il WP_Query
classe puoi creare query molto più specifiche per pubblicare post per data, compresi i post che hai pubblicato in una determinata data, prima di una data, dopo una data o tra un paio di date.
Il date_query
gli argomenti si combinano con altri parametri come post_status
, che è trattato in maggior dettaglio altrove in questa serie.