WordPress è un CMS e quindi la manipolazione dei contenuti è uno dei pilastri principali dello strumento. In questo post capirai il processo utilizzato da WP per recuperare ciò che deve essere visualizzato e anche come è possibile modificare questo processo.
lo scopo di questo testo non è affatto un sostituto della documentazione ufficiale, che dovrebbe sempre essere consultata. Il vostro obiettivo è quello di mettere in un unico luogo ciò che i principianti dovrebbero sapere prima di iniziare la ricerca di ulteriori informazioni.
- che cos’è una query WordPress?
- che cos’è WP_Query?
- Tag condizionali e WP_Query
- creare i propri loop: WP_Query e get_posts ()
- creazione di un ciclo con WP_Query
- creazione di un ciclo con get_posts()
- differenza tra WP_Query e get_posts ()
- global WordPress wp_query e WordPress wp_the_query
- perché query_posts() non dovrebbe essere usato nei file del tema?
- come modificare la query principale? Usa pre_get_posts
- un altro esempio: elimina una categoria dall’elenco dei post del blog
- conclusione
che cos’è una query WordPress?
Query in inglese significa query ed è solitamente il termine usato per riferirsi a un’istruzione in SQL (Structured Query Language). In WordPress chiamiamo query le query per i contenuti realizzati attraverso la classe wp_query.
che cos’è WP_Query?
WP_Query è la classe PHP dietro tutte le ricerche di contenuti in WordPress. Accetta diversi parametri nella sua costruzione, inclusi i tipi di post, i metadati, le tassonomie e le date, oltre a rendere possibile la creazione di parametri personalizzati.
la classe wp_query viene attivata su tutte le richieste fatte al tuo sito, con l’eccezione di eccezioni forse molto rare per gli indirizzi controllati da plugin che interrompono il flusso normale. Ogni volta che chiamiamo una pagina, un post, un termine di tassonomia e così via. WordPress interpreta l’indirizzo richiesto tramite l’API rewrite e crea un WP_Query basato sugli argomenti interpretati.
Tag condizionali e WP_Query
creare i propri loop: WP_Query e get_posts ()
quando ci riferiamo al ciclo in WordPress stiamo parlando di iterazione (senza la n) dai post selezionati. Di solito abbiamo solo un ciclo, che assomiglia sempre al codice seguente:
se ci sono post, scorrere su di essi. La prima istruzione all’interno di while
è the_post()
, che dice a WordPress di inserire le variabili del prossimo post del ciclo nella variabile globale $post
, tramite il metodo setup_postdata()
della classe wp_query.
questo è l’aspetto del ciclo principale, cioè l’iterazione del set di post che WordPress ha trovato durante la decodifica della richiesta e la ricerca dei contenuti corrispondenti. Se abbiamo bisogno di un altro set di post (contenuti correlati, contenuti di una determinata categoria al di fuori del file o post pubblicati dopo ciò che viene visualizzato, ad esempio), possiamo farlo in due modi: creare un nuovo oggetto wp_query o chiamare la funzione get_posts (). Entrambi fanno la stessa cosa, ma torneranno a voi cose diverse.
creazione di un ciclo con WP_Query
un semplice esempio di come creare un ciclo con WP_Query:
si noti come il test e l’iterazione su have_posts()
rimangono lì, proprio come the_post()
, ma questa volta come metodi della variabile che abbiamo creato.
la funzione wp_reset_postdata () serve a ripristinare la variabile globale $post
al suo stato prima della nostra query, cioè, rimetterà in global $post
il post di global $wp_query
, che vedremo più avanti.
creazione di un ciclo con get_posts()
lo stesso esempio utilizzando la funzione get_posts()
:
la funzione get_the_title () accetta come parametro un post diverso da quello presente nella variabile globale $post
. Se è necessario utilizzare la funzione_content (), ad esempio, sarà necessario modificare quella globale, come segue:
differenza tra WP_Query e get_posts ()
la differenza di base è ciò a cui si avrà accesso. Usando WP_Query hai accesso al numero di post trovati in totale ($query->found_posts
) e al numero di pagine possibili ($query->max_num_pages
), ad esempio. La funzione get_posts()
d’altra parte porta alcuni argomenti già riempiti oltre a, per impostazione predefinita, essere leggermente più veloce: passa il parametro no_found_rows
come true, impedendo alla query finale di avere l’opzione SQL_CALC_FOUND_ROWS
e, con questo, esentando MySQL dal passare la quantità totale di righe trovate.
global WordPress wp_query e WordPress wp_the_query
in questo processo di interpretazione della richiesta e generazione dell’oggetto di classe wp_query WordPress crea due variabili globali: $wp_query
, che probabilmente hai visto da qualche parte, e $wp_the_query
, che sarà sempre la copia originale di ciò che è stato richiesto dall’utente. Se qualcuno scherza con $wp_query
, almeno possiamo riportarlo al suo stato normale con $wp_the_query
. Questo è esattamente ciò che fa la funzione wp_reset_query ().
perché query_posts() non dovrebbe essere usato nei file del tema?
questo è il flusso predefinito di una richiesta a un indirizzo del tuo sito al di fuori della dashboard:
non dovresti usare query_posts () perché è stato chiamato prima. Chiamandolo di nuovo duplicherai l’elaborazione (chiedendo a WordPress di fare un’altra query) e inoltre potenzialmente ignorerai ciò che alcuni plugin hanno già usato.
il paging è un altro esempio di come l’utilizzo di query_posts()
può interrompere il tuo lavoro. Se si desidera visualizzare 15 post per pagina in una determinata categoria e provare a sovrascrivere l’importo WP predefinito tramite query_posts()
si avrà una situazione in cui il primo elemento della seconda pagina dovrebbe essere il 16, ma in realtà è solo l’11.
come modificare la query principale? Usa pre_get_posts
usare query_posts()
è sconsigliabile da un po ‘ di tempo. Da allora, molti hanno spiegato perché e incoraggiato gli sviluppatori a utilizzare l’azione pre_get_posts, con particolare attenzione a Leo Bahiano, che ha affettuosamente soprannominato l’azione preguetinho (l’uso di giochi di parole con il preguetinho do Leo Bahiano è autorizzato nei commenti).
l’uso è semplice. Per eliminare il paging nella ricerca, ad esempio, puoi utilizzare il seguente codice nel functions.php
del tuo tema :
il codice assegna la sua funzione a hook pre_get_posts
, quindi la sua funzione verrà eseguita ogni volta che viene elaborata una query. All’interno di esso, abbiamo bisogno di assicurarsi che stiamo solo andando a lavorare in query necessarie, così verifichiamo se siamo veramente in “front” parte del sito (in questo modo non disturbare qualsiasi cosa, da pannello), se siamo nella query principale della pagina, che è, se la query in questione è $wp_the_query
e Se tutto questo è vero che dobbiamo cambiare l’attributo posts_per_page
per -1
, il che significa nessun limite di posti.
un altro esempio: elimina una categoria dall’elenco dei post del blog
se hai bisogno di molte modifiche puoi unirle tutte in un’unica funzione: