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!
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:
WP_Query
esempio,WP_Query
classe,$ My_query->
all'inizio del have_posts ()
e the_post ()
funzioni (quindi ora sono i metodi di WP_Query
classe),$ 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.
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!
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.
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".
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.
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.
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!
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. = ' '; else // Mostra messaggi per far sapere all'utente che non sono stati trovati post. $ 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. = ''; $ output. = ' '; wp_reset_postdata (); restituire $ output; add_shortcode ('embed_post', 'tutsplus_embedded_post_shortcode'); ?>'. __ ('Nessun post trovato.', 'Tutsplus'). '
'; $ output. = '
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. = ' '; else // Fai sapere all'utente che non è stato trovato nulla. $ output = ''; $ output. = ''; // Termina il markup generativo. $ output. = ''. get_the_title (). '
'; $ output. = get_the_title (); $ output. = ''; if ($ show_excerpts) $ output. = ''; $ output. = get_the_excerpt (); $ output. = ''; $ output. = ''; $ output. = ' '; wp_reset_postdata (); restituire $ output; ?>'. __ ('Niente trovato', 'tutsplus'). '
'; $ output. = '
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.
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); ?>
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!