Padronanza di WP_Query 10 esempi utili

Ora che abbiamo imparato quasi tutto sul WP_Query classe, è tempo di provare alcuni esempi. In questa parte, lavoreremo su 10 diversi scenari per utilizzare il WP_Query classe e funzioni correlate.

Sarà un esercizio divertente e spero che sarà ugualmente educativo. Cominciamo!

Un promemoria rapido sulla creazione di un loop con WP_Query

Solo per rendere questo articolo comprensibile separatamente dalla serie "Mastering WP_Query", dovrei fare un nano-tutorial sulla creazione di loop di WordPress con il WP_Query classe.

Non è diverso da creare un ciclo regolare, davvero. Un tipico ciclo WordPress va così:

E creando un ciclo con il WP_Query la classe ha solo poche differenze:

 'notizie', 'posts_per_page' => 3); $ my_query = new WP_Query ($ args); if ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) $ my_query-> the_post (); // I dati post vanno qui.  // Reimposta i dati di "$ post" sul post corrente nella query principale. wp_reset_postdata (); ?>

Vediamo la differenza tra i due:

  • Abbiamo impostato alcuni argomenti per il nostro WP_Query esempio,
  • Abbiamo istanziato il WP_Query classe,
  • Abbiamo aggiunto $ My_query-> all'inizio del have_posts () e the_post () funzioni (quindi ora sono i metodi di WP_Query classe),
  • E resettiamo i dati di $ postale in modo che possa tornare alla query principale.

Ora sappiamo come creare un ciclo con WP_Query e la differenza tra un ciclo regolare e un ciclo creato con WP_Query. Non creeremo loop in ogni esempio (al fine di mantenere il tutorial breve e sull'argomento), quindi puoi fare riferimento a questa sezione se hai bisogno di creare un loop con gli esempi qui sotto.

Esempio 1: i post di un autore in quest'anno

Diciamo che vuoi elencare i post di un autore specifico scritti nell'anno corrente in una sezione speciale "Articoli dell'autore quest'anno". Una semplice combinazione di due WP_Query i parametri saranno sufficienti:

 'john', // Prendi i suoi post da quest'anno. 'year' => $ current_year); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); ?>

Passa questa query in un ciclo e sei a posto!

Esempio n. 2: "Ultimi messaggi da questa categoria" (ad eccezione del post corrente)

Supponiamo che tu voglia creare un ciclo sotto ogni post nelle loro singole pagine di post ed elencare i post più recenti dalla categoria in cui si trova il post. Ovviamente, devi escludere il post corrente nel caso in cui potrebbe essere uno degli ultimi messaggi da quella categoria. Ecco come si crea la query con 'gatto' e 'Post__not_in' parametri:

term_id; // argomenti di installazione. $ args = array (// Ottieni i post della categoria. 'cat' => $ current_post_first_cat_id, // Escludi il post corrente. 'post__not_in' => array ($ current_post_id)); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); ?>

Per il ciclo, suggerisco di creare tre o quattro colonne con miniature dei post sopra i titoli dei post. Sarà davvero bello sotto il post e prima della sezione dei commenti.

Esempio n. 3: "Messaggi più popolari" Ordinato dal conteggio commenti

WordPress non ha un sistema integrato di "post view count" e i plug-in che forniscono questa funzionalità sono famosi per rallentare il sito Web (perché su ogni post, i plug-in scrivono nel database più e più volte per registrare la vista conta). Tuttavia, esiste un altro tipo di misurazione per determinare quali post sono più "popolari": contare i commenti. E a differenza dei conteggi delle viste, i conteggi dei commenti sono già presenti nel database: il WP_Query la classe rende super facile ordinare i post tramite il conteggio dei commenti:

 'comment_count'); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); ?>

Vedi com'è facile? Ora immagina di creare un modello di pagina personalizzato con un ciclo su cui è in esecuzione questa query, una pagina "Messaggi più commentati".

Esempio n. 4: una semplice impostazione del dispositivo di scorrimento

Quando si utilizza WordPress per creare siti Web aziendali, portafogli o riviste web, gli slider sono diventati uno standard industriale "must-have". Non sono un vero fan degli slider (penso che sia un cattivo UX), ma al web sembra piacere, quindi non posso dire di no ai miei clienti mentre realizzo siti web per loro. Se vogliono cursori, uso una semplice query usando il WP_Query classe:

 'slider', // Ottieni una categoria di slider specifica. 'category_name' => 'home-slides', // Ottieni tutte le diapositive e non impaginare. 'nopaging' => true); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); ?>

Il 'gatto' l'argomento può essere utilizzato per recuperare le diapositive da diverse categorie in modo da poter separare i gruppi di diapositive e utilizzare più cursori su più pagine. Se stai per utilizzare un solo cursore nel tuo sito web, puoi eliminare quella linea e sei pronto per partire.

Esempio n. 5: una quotazione casuale nella barra laterale

Se sei appassionato di letteratura o di religione, potresti volere avere alcune delle tue citazioni preferite nella barra laterale: non è uno spreco di spazio se usi l'area con uno scopo. Pertanto, se hai intenzione di elencare una citazione casuale nella barra laterale in ogni visualizzazione di pagina, puoi utilizzare il seguente frammento di codice per creare il tipo di post e utilizzare la seguente query per creare un loop nella barra laterale:

 "Quotes", "public" => true); register_post_type ('quotes', $ args);  add_action ('init', 'quote_post_type'); // argomenti di installazione. $ args = array (// Ottieni il tipo di psot "virgolette". "post_type" => "virgolette", // Randomizza l'ordine. "orderby" => "rand", // Ottieni solo un articolo. "posts_per_page" = > 1,); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); ?>

Una soluzione semplice ed elegante.

Esempio n. 6: elenco dei prodotti tra una fascia di prezzo

Ho trovato questo esempio su Scribu.net e devo dire che potrebbe essere il migliore WP_Query trucco in questo tutorial. È un po 'più tecnico rispetto agli altri, perché può essere applicato a un sito di e-commerce basato su WordPress in questo contesto.

Ecco lo snippet di codice che utilizzerai se desideri elencare elementi da un tipo di post "Prodotto" personalizzato e filtrare i risultati con i campi personalizzati "prezzo":

 'prodotto', // Imposta la "meta query". 'meta_query' => array (array (// Ottieni il campo personalizzato "price". 'key' => 'price', // Imposta i valori di prezzo. 'value' => array (100, 200), // Set l'operatore di confronto. 'compare' => 'BETWEEN', // Cerca solo nei campi numerici. 'type' => 'numeric',))); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); ?>

Un grande plauso a Silviu-Cristian Burca!

Esempio n. 7: uno shortcode per incorporare i post all'interno dei post

Ecco un esercizio divertente e usiamo anche l'API Shortcode! In questo esempio, creeremo uno shortcode che può incorporare un post in un post. (Difficilmente mi sono trattenuto dal nominare lo shortcode [Postception].) Nel seguente frammento di codice, creiamo una funzione shortcode che ci consente di incorporare post (o qualsiasi tipo di post personalizzato) e ci consente di scegliere se mostrare il post completo o solo un estratto:

 'post', 'slug' => ", 'full' => true), $ attributes)); // Setup argomenti. $ args = array (// Ottieni il tipo di post (" post "di default)." post_type " => $ type, // Ottieni post di slug. 'name' => $ slug); // Istanzia nuova istanza di query. $ my_query = new WP_Query ($ args); // Verifica che i risultati delle query siano. my_query-> have_posts ()) // Inizia a generare markup. $ output = '
'; // Inizia il ciclo sui risultati della query. while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Aggiungi titolo all'output. $ output. = '

'; $ output. = get_the_title (); $ output. = '

'; // Ricevi post completo se '$ full' è vero, altrimenti mostra l'estratto get ('true' === $ completo) // Aggiungi il contenuto completo all'output. $ output. = '
'; $ output. = get_the_content (); $ output. = '
'; else // Aggiungi estratto all'output. $ output. = '
'; $ output. = get_the_excerpt (); $ output. = '… '. __ ('Vedi post completo', 'tutsplus'). '»'; $ output. = '
'; // Fine generazione di markup. $ output. = '
'; else // Mostra messaggi per far sapere all'utente che non sono stati trovati post. $ output = '
'; $ output. = '

'. __ ('Nessun post trovato.', 'Tutsplus'). '

'; $ output. = '
'; wp_reset_postdata (); restituire $ output; add_shortcode ('embed_post', 'tutsplus_embedded_post_shortcode'); ?>

Esempio 8: Elenco dei messaggi programmati correnti (con estratti facoltativi)

Ecco un'idea: perché non mostri qualche "anticipazione" dei tuoi prossimi post ai tuoi visitatori? Puoi utilizzare la seguente funzione per elencare i tuoi post programmati con o senza estratti dopo i titoli:

 * * Utilizzo senza estratti: * *  * / function tutsplus_show_drafts ($ show_excerpts = true) // Imposta argomenti. $ args = array ('post_status' => 'future', 'nopaging' => true); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); // Controlla che abbiamo i risultati delle query. if ($ my_query-> have_posts ()) // Inizia a generare markup. $ output = '
'; // Inizia il ciclo sui risultati della query. while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Output draft post title ed excerpt (se abilitato). $ output. = '
'; $ output. = '

'. get_the_title (). '

'; $ output. = get_the_title (); $ output. = ''; if ($ show_excerpts) $ output. = '
'; $ output. = get_the_excerpt (); $ output. = '
'; $ output. = '
'; // Termina il markup generativo. $ output. = '
'; else // Fai sapere all'utente che non è stato trovato nulla. $ output = '
'; $ output. = '

'. __ ('Niente trovato', 'tutsplus'). '

'; $ output. = '
'; wp_reset_postdata (); restituire $ output; ?>

Esempio n. 9: "Post da un anno fa oggi"

Se il tuo blog è più vecchio di un anno e il tuo contenuto è senza tempo (nel senso che sia una persona del 2015 che quella del 2025 troverà l'articolo pertinente), aggiungere una sezione "Pubblica da un anno fa" potrebbe aumentare le visualizzazioni della tua pagina. Ecco come lo fai:

 data ('j'), // Mese (1 - 12). 'monthnum' => date ('n'), // Year (meno 1). 'year' => date ('Y') - 1, // Mostra solo un post. 'posts_per_page' => 1); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); ?>

Utilizzare questa query per creare un ciclo che visualizza un singolo post di ieri.

Esempio 10: Mostra i bambini della pagina corrente

Non hai altro che i titoli delle sotto-pagine da inserire nella tua pagina "Servizi", "I nostri lavori" o "Il mio portafoglio"? Forse un paragrafo introduttivo, ma hai ragione, quelle pagine sono destinate a essere "segnaposto". Tuttavia, è una buona idea posizionare sotto-pagine, magari una griglia con miniature quadrate e titoli sottostanti. Vediamo quale query dovremmo usare quando creiamo un modello di pagina simile:

 $ current_page_id, // Disabilita l'impaginazione. 'nopaging' => true); // Crea un'istanza di una nuova istanza di query. $ my_query = new WP_Query ($ args); ?>

Avvolgendo

Spero che questi esempi ti siano piaciuti tanto quanto ho fatto mentre li preparavo. Ho prestato particolare attenzione a dare diversi esempi sia per essere divertente e per stimolare la tua creatività.

Se hai pensato ad esempi migliori durante la lettura di questi, o hai delle domande, non esitare a scrivere un commento qui sotto. E se ti è piaciuto l'articolo, non dimenticare di condividerlo con i tuoi amici!

Nella prossima parte, parleremo di WP_User_Query, una delle classi sorelle di WP_Query. Ci vediamo!