✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Guida: come interrogare i post in WordPress

20

Quali metodi sono disponibili per creare una query post personalizzata e quando è meglio utilizzarli? Questo post mira a stabilire una solida comprensione di due metodi per interrogare i post, come accedere ai risultati, come costruire argomenti e, infine, come ripulirli. I due metodi che esamineremo sono get_posts()e WP_Query.

Quando si tratta di creare una nuova query di post, ci sono davvero due opzioni (al momento della scrittura). La scelta dipende davvero solo dalle tue preferenze (e da qualche effetto minore sulle prestazioni). Un’opzione ha il potenziale per rovinare il loop/query globale in cui ti trovi attualmente, a meno che non lo gestisca correttamente. Con un’opzione gestisci gli oggetti e nell’altra opzione gestisci un array. Gli argomenti per la personalizzazione della query post sono tuttavia identici.

Domanda globale?

Se non sei sicuro di cosa intendo con "incasinare la query globale", è questo. WordPress crea sempre una query globale, a seconda della pagina in cui ti trovi. Se un visitatore visita un archivio di categorie, WordPress ha creato una query di post per questo. Il tema normalmente accede ai post nella query utilizzando "il ciclo". Quando creiamo una nuova query con il proprio ciclo all’interno di questo ciclo, dobbiamo assicurarci che la query globale di WordPress e la nostra query vengano gestite separatamente.

Tuttavia, se vuoi modificare la query del post di WordPress, questa è un’altra storia. Ho un altro post che approfondisce come farlo.

Diamo un’occhiata alle due opzioni che abbiamo e come le gestiamo. Successivamente esamineremo gli argomenti per personalizzare la query. Tieni presente che gli argomenti sono identici per entrambi.

I due metodi per interrogare i post

Puoi interrogare i post con la funzione get_posts()o creando una nuova istanza di WP_Query.La prima opzione restituisce un array di post e nella seconda gestisci un oggetto. Poiché get_posts()restituisce un array di soli post, di solito è più semplice usarlo ovunque tu voglia. Tuttavia, se vuoi impaginare la tua query, dovresti assolutamente creare WP_Queryun’istanza.

La funzione get_postsè una funzione wrapper per WP_Querycui significa che accetta gli stessi argomenti, ma get_postsha alcuni argomenti "alias" aggiuntivi. La pagina della documentazione di WordPress per get_posts non elenca i possibili argomenti (tranne gli argomenti alias), ma fa riferimento alla pagina della documentazione per WP_Query per gli argomenti. Vedremo più da vicino le argomentazioni più avanti.

Se le prestazioni sono un problema (cioè il sito ha molti post), get_postsè più veloce dell’utilizzo WP_Queryperché salta il calcolo per l’impaginazione.

Il metodo per scorrere la tua query post personalizzata varia a seconda del metodo scelto. Dovresti avere familiarità con il comune ciclo di WordPress utilizzato in quasi tutti i modelli di temi:

if (have_posts()) { while (have_posts()): the_post(); // Access to each post; you can use template tags here endwhile; }

Ciclo usando WP_Query

Il ciclo dei risultati dell’utilizzo WP_Queryè esattamente lo stesso, tranne per il fatto che ci riferiamo specificamente all’oggetto istanza nel ciclo. Dobbiamo anche ricordare di "reimpostare lo stato" dopo aver terminato il ciclo in modo che l’oggetto post globale venga riportato a quello che era prima. Per farlo utilizziamo wp_reset_postdata().

Se scarichi l’oggetto istanziato da WP_Query( $custom_querynell’esempio sopra) troverai la query completa e gli argomenti utilizzati. Le parti interessanti qui sono le proprietà ‘ found_posts‘ e ‘ posts‘. La postsproprietà ‘ ‘ contiene il risultato degli oggetti post attraverso i quali verrà eseguito il ciclo. Il numero di post che corrispondono alla tua richiesta viene restituito in ‘ found_posts‘ ed è utile se vuoi creare un’impaginazione personalizzata. Dividi questo valore con l’impostazione di WordPress per il numero di post per pagina per capire quante pagine hai bisogno per la tua query, o semplicemente fai riferimento alla proprietà ‘ max_num_pages‘.

Nota: quando si utilizza get_postsWordPress restituisce solo la postsproprietà ‘ ‘ (che è un array) WP_Querydall’oggetto.

Ciclo usando get_posts

Usando get_postsnon utilizziamo il solito "ciclo WordPress", invece utilizziamo un normale ciclo di array PHP. Ogni elemento nell’array è un oggetto post e non è necessario reimpostare dopo aver terminato il ciclo. Tieni presente che i tag del modello (come the_title(), the_permalink()ecc.) non sono disponibili all’interno di questo ciclo. Dovrai fare riferimento alle proprietà dell’oggetto del post (ad es $custom_post->ID. ).

Ti consiglio di nominare gli oggetti del tuo post in modo diverso da $post. Potresti riscontrare problemi quando tenti di accedere alle proprietà del post (potrebbe fare riferimento all’oggetto post globale e non al post nel ciclo).

Se desideri utilizzare i tag modello per accedere più facilmente alle informazioni sui post (come the_title()e the_permalink()), puoi farlo. Fallo dicendo a WordPress di impostare l’oggetto post globale all’interno del ciclo con setup_postdata(). Se lo fai, dovrai ripristinare lo stato con wp_reset_postdata()dopo il ciclo.

$custom_query = get_posts([/ Arguments here /]); foreach ($custom_query as $post) { setup_postdata($post); // Template tags are available here, for example: the_title(); } wp_reset_postdata();

Tieni presente che setup_postdatarichiede che gli oggetti che stai attraversando (la asparte ” " nel ciclo foreach) siano nominati $post! Nel primo esempio ho chiamato gli oggetti post $custom_poste questo non avrebbe funzionato con setup_postdata().

Tuttavia, se hai solo bisogno di accedere alle informazioni di base sul post, potresti anche saltare la configurazione dell’oggetto post globale e piuttosto utilizzare i get_tag " "-template corrispondenti e l’ID post. Ad esempio, il tag the_permalink()funziona correttamente solo se l’oggetto post globale è impostato, ma puoi richiedere il permalink post senza l’oggetto post globale semplicemente usando echo get_the_permalink($custom_post->ID).

Argomenti di query

Puoi trovare l’elenco completo di tutti i possibili argomenti nella pagina della documentazione di WP_Query. Esempi di parametri sono i post con termini specifici da una tassonomia, i meta valori dei post, i tipi di post, l’inclusione o l’esclusione di post specifici e un’intera gamma di opzioni per ordinare i risultati. Ce ne sono troppi per esaminarli in dettaglio, ma ecco alcuni esempi comuni di argomenti per interrogare i post.

Esempio 1: post correlati della stessa categoria

Supponiamo che tu voglia mostrare un "post correlato" alla fine di un singolo post. Dovrebbe mostrare una selezione casuale di 3 post che sono nella stessa categoria del post corrente e dovrebbe escludere il post corrente dal risultato.

Gli argomenti sono abbastanza autoesplicativi. Chiedo solo ‘ post‘ in post_type‘ e un massimo di 3 post in ‘ posts_per_page'.

Per eseguire query sui post nelle categorie, puoi creare una tax_query o utilizzare il più semplice ‘ category__in‘ (NB: funziona solo per la categoria dei post). Nell’esempio sopra lo uso wp_get_post_categories()per ottenere una matrice di ID termine assegnati al post fornito e lo uso per l’argomento ‘ category__in‘.

Puoi escludere gli ID post con ‘ post__not_in‘ mentre ho fornito l’ID post corrente. Alla fine ho chiesto un ordine casuale di post impostando ‘ rand‘ in ‘ orderby‘. Potresti fornire ad esempio ‘ title‘ o ‘ date‘ per ordinarli in modo diverso. Dai un’occhiata alla documentazione per l’ordinazione per vedere cosa è possibile.

Esempio 2: tutti i post di un tipo di post personalizzato con più argomenti di ordinamento

In questo esempio assumiamo che tu abbia un tipo di post personalizzato ‘ book‘ e in un modello di pagina personalizzato desideri visualizzare tutti i libri pubblicati. Desideri ordinare i post principalmente per menu_order (l’attributo della pagina, è un numero che puoi impostare per post) e in secondo luogo per titolo del post.

Ancora una volta, gli argomenti sono piuttosto autoesplicativi. Richiedo il tipo di post ‘ book‘ come ‘ post_type‘. Quando imposti ‘ posts_per_page‘ su -1, recupererà tutti (post pubblicati, a meno che tu non specifichi qualcosa di diverso post_statusnell’argomento ‘ ‘). Infine fornisco un array per ‘ orderby‘ per dire a WordPress di ordinare i post principalmente in base all’ordine del menu in ordine crescente e in secondo luogo il titolo del post in ordine decrescente.

Esempio 3: post con metadati personalizzati

Supponiamo che tu abbia un tipo di post personalizzato " book" e desideri interrogare tutti i libri non pubblicati o un libro pubblicato tra l’anno 1990 e il 2019.

È meglio creare una query utilizzando post meta meta_query(per meta argomenti molto semplici che puoi usare meta_keye meta_valuedirettamente). L’ meta_queryargomento ‘ ‘ richiede un array, dove ogni argomento è un array. Puoi controllare la relazione tra ogni argomento con ‘ relation‘, che ho impostato su ‘ OR‘ nell’esempio sopra.

Fornisco due argomenti di metadati a ‘ meta_query‘. Il primo confronta semplicemente la meta chiave ‘ book_status‘ con il testo ‘ unpublished‘, e se è uguale verrà inclusa. Nel secondo argomento dico a WordPress di ottenere qualsiasi valore nella meta chiave ‘ year_published‘ che sia compreso tra i numeri 1990 e 2019.

Conclusione

Ora dovresti avere una conoscenza di base dei due metodi per interrogare i post. Non c’è una grande differenza in quanto puoi creare la stessa query utilizzando entrambi, ma il modo di gestirli è diverso. I tre esempi forniti di argomenti di query riguardano solo la superficie delle query che puoi creare. Fare riferimento alla documentazione di WP_Query per una panoramica completa con molti esempi.

Se sei curioso di sapere come modificare la query globale eseguita da WordPress, ho un post separato che approfondisce l’argomento.

Fonte di registrazione: awhitepixel.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More