Nå som vi lærte nesten alt om WP_Query
klassen, det er på tide å prøve noen eksempler. I denne delen skal vi jobbe med 10 forskjellige scenarier for å utnytte WP_Query
klasse og relaterte funksjoner.
Det blir en morsom øvelse, og jeg håper det blir like pedagogisk. La oss begynne!
Bare for å gjøre denne artikkelen forståelig separat fra serien "Mastering WP_Query", bør jeg gjøre en nano-opplæring om å lage WordPress-sløyfer med WP_Query
klasse.
Det er ikke annerledes enn å skape en vanlig sløyfe, egentlig. En typisk WordPress-sløyfe går slik:
Og skape en loop med WP_Query
klassen har bare noen få forskjeller:
'nyheter', 'posts_per_page' => 3); $ my_query = nytt WP_Query ($ args); hvis ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Postdata går her. // Tilbakestill "$ post" -dataene til det nåværende innlegget i hovednavnet. wp_reset_postdata (); ?>
La oss se forskjellen mellom de to:
WP_Query
forekomst,WP_Query
klasse,$ My_query->
til begynnelsen av have_posts ()
og posten()
funksjoner (slik at de nå er metodene til WP_Query
klasse),$ post
så det kan komme tilbake til hovedspørsmålet.Nå vet vi hvordan man lager en løkke med WP_Query
og forskjellen mellom en vanlig sløyfe og en sløyfe opprettet med WP_Query
. Vi kommer ikke til å lage sløyfer i hvert eksempel (for å holde opplæringen kort og om emnet), så du kan se denne delen hvis du trenger å lage en loop med eksemplene nedenfor.
La oss si at du vil oppgi en bestemt forfatters innlegg skrevet i inneværende år i en spesiell "Forfatterens innlegg i år". En enkel kombinasjon av to WP_Query
parametere vil være tilstrekkelig:
'John', // Få hans innlegg fra dette året. 'år' => $ current_year); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); ?>
Pass denne spørringen i en løkke, og du er god til å gå!
La oss si at du vil lage en løkke under hvert innlegg i deres enkelt innleggssider, og oppgi de siste innleggene i kategorien som innlegget er i. Selvfølgelig må du ekskludere det nåværende innlegget i tilfelle det kan være en av de nyeste innlegg fra denne kategorien. Slik lager du spørringen med 'katt'
og 'Post__not_in'
parametere:
term_id; // Oppsett argumenter. $ args = array (// Få kategori innlegg. 'cat' => $ current_post_first_cat_id, // Utelat nåværende innlegg. 'post__not_in' => array ($ current_post_id)); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); ?>
For sløyfen foreslår jeg at du lager tre eller fire kolonner med innlegg miniatyrer over posttitler. Det vil se veldig fint rett under innlegget og før kommentarseksjonen.
WordPress har ikke et innebygd system for visning av postvisning, og plugins som gir denne funksjonaliteten, er kjent for å bremse ned webområdet (fordi på hver innleggsvis visning skriver pluginene i databasen igjen og igjen for å ta opp visningen teller). Det er imidlertid en annen type måling for å bestemme hvilke innlegg som er mest "populære": telle kommentarer. Og i motsetning til visningstall, er kommentertellingen allerede i databasen - den WP_Query
klassen gjør det super enkelt å bestille innlegg etter kommentar telle:
'comment_count'); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); ?>
Se hvor lett dette er? Forestill deg nå å lage en egendefinert sidemal med en loop som kjører dette spørsmålet - siden "Mest kommenterte innlegg".
Når du bruker WordPress til å bygge bedriftens nettsteder, porteføljer eller webmagasiner, har skyvekontrollene blitt en "må-ha" industristandard. Jeg er egentlig ikke en fan av skyveknapper (jeg tror det er dårlig UX), men Internett ser ut til å like det, så jeg kan ikke bare si nei til klientene mine mens du lager nettsteder for dem. Hvis de vil ha glidebrytere, bruker jeg et enkelt søk ved hjelp av WP_Query
klasse:
'glidebryter', // Få en bestemt gliderkategori. 'category_name' => 'home-slides', // Få alle lysbildene og ikke paginere. 'nopaging' => true); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); ?>
De 'katt'
Argument kan brukes til å hente lysbilder fra forskjellige kategorier, slik at du kan skille lysbildegrupper og bruke flere skyveknapper på flere sider. Hvis du skal bruke bare en skyvekontroll på nettstedet ditt, kan du slette den linjen, og du er god til å gå.
Hvis du er opptatt av litteratur eller religiøs, vil du kanskje ha noen av dine favoritt sitater i sidefeltet - det er ikke sløsing med plass hvis du bruker området med hensikt. Så hvis du skal liste et tilfeldig sitat i sidebjelken på hver sidevisning, kan du bruke følgende kodestykke for å lage posttypen og bruke følgende spørring for å lage en loop i sidebjelken:
'Quotes', 'public' => true); register_post_type ('sitater', $ args); add_action ('init', 'quote_post_type'); // Oppsett argumenter. $ args = array (// Få "sitater" psotype. 'post_type' => 'sitater', // Randomize rekkefølgen. 'orderby' => 'rand', // Få bare ett element. 'posts_per_page' = > 1,); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); ?>
En enkel og elegant løsning.
Jeg fant dette eksemplet på Scribu.net, og jeg må si, det kan være det beste WP_Query
triks i denne opplæringen. Det er litt mer teknisk enn de andre også, fordi det kan brukes på et WordPress-drevet e-handelsnettsted i denne sammenheng.
Her er kodebiten du vil bruke hvis du vil liste opp elementer fra en egendefinert "Produkt" posttype og filtrere resultatene med "pris" egendefinerte felt:
'produkt', // Oppsett "meta query". 'meta_query' => array (array (// Få "pris" tilpasset felt. 'key' => 'pris', // Sett prisverdiene. 'value' => array (100, 200) sammenligne operatøren. 'sammenlign' => 'MELLOM', // Bare se på numeriske felt. 'type' => 'numerisk',)))); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); ?>
Et stort kudos til Silviu-Cristian Burca!
Her er en morsom øvelse, og vi kommer til å bruke Shortcode API også! I dette eksemplet skal vi lage en kortkode som kan legge inn et innlegg i et innlegg. (Jeg inneholdt nesten ikke meg fra å navngi kortnummeret [Postception]
.) I den følgende kodestykket oppretter vi en shortcode-funksjon som lar oss legge inn innlegg (eller en egendefinert innleggstype) og lar oss velge om du vil vise hele innlegget eller bare et utdrag:
$) = argent = array (// Få posttype ("innlegg" som standard). 'post_type' => $ type, // Få post ved slug. 'name' => $ slug); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); // Sjekk at vi har spørringsresultater. my_query-> have_posts ()) // Begynn å generere markup. $ output = ''; // Start looping over spørringsresultatene. mens ($ my_query-> have_posts ()) $ my_query-> the_post (); // Legg tittel til utdata. $ output. = ' '; else // Utgående melding for å la brukeren vite at ingen innlegg ble funnet. $ output = ''; $ output. = get_the_title (); $ output. = '
'; // Få fullt innlegg hvis '$ full' er sant, ellers, vis utdraget hvis ('true' === $ full) // Legg til fullt innhold til utdata. $ output. = ''; $ output. = get_the_content (); $ output. = ''; ellers // Legg utdrag til utdata. $ output. = ''; $ output. = get_the_excerpt (); $ output. = '… '. __ ('Se hele innlegget', 'tutsplus'). '' '; $ output. = ''; // Slutt å generere merking. $ output. = ''; $ output. = ' '; wp_reset_postdata (); returnere $ output; add_shortcode ('embed_post', 'tutsplus_embedded_post_shortcode'); ?>'. __ ('Ingen innlegg funnet.', 'Tutsplus'). '
'; $ output. = '
Her er en ide: Hvorfor viser du ikke noen "snikker" av dine kommende innlegg til dine besøkende? Du kan bruke følgende funksjon til å liste dine planlagte innlegg med eller uten utdrag etter titlene:
* * Bruk uten utdrag: * * * / funksjon tutsplus_show_drafts ($ show_excerpts = true) // Oppsett argumenter. $ args = array ('post_status' => 'future', 'nopaging' => true); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); // Sjekk at vi har søksmål. hvis ($ my_query-> have_posts ()) // Begynn å generere markup. $ output = ''; // Start looping over spørringsresultatene. mens ($ my_query-> have_posts ()) $ my_query-> the_post (); // Utkast til utkast etter tittel og utdrag (hvis aktivert). $ output. = ' '; ellers // La brukeren vite at ingenting ble funnet. $ output = ''; $ output. = ''; // Slutt genererer oppmerkning. $ output. = ''. get_the_title (). '
'; $ output. = get_the_title (); $ output. = ''; hvis ($ show_excerpts) $ output. = ''; $ output. = get_the_excerpt (); $ output. = ''; $ output. = ''; $ output. = ' '; wp_reset_postdata (); returnere $ output; ?>'. __ ('ingenting funnet', 'tutsplus'). '
'; $ output. = '
Hvis bloggen din er eldre enn et år, og innholdet ditt er tidløst (noe som betyr at både en person fra 2015 og 2025 finner artikkelen relevant), kan du legge til en «Innlegg fra et år i dag» -delen for å øke sidevisninger. Slik gjør du det:
dato ('j'), // måned (1 - 12). 'monthnum' => dato ('n'), // År (minus 1). 'år' => dato ('Y') - 1, // Vis bare ett innlegg. 'posts_per_page' => 1); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); ?>
Bruk denne søket til å bygge en loop som viser et enkelt innlegg fra i fjor.
Du har ikke noe annet enn undersidens titler å sette inn på siden "Tjenester", "Våre verker" eller "Min portefølje"? Kanskje et intro-avsnitt, men du har rett, de sidene er dømt til å være "plassholdere". Likevel, det er en god ide å plassere undersider der, kanskje et rutenett med firkantede miniatyrer og titler under. La oss se hvilket spørsmål vi skal bruke når du oppretter en slik sidemal:
$ current_page_id, // Deaktiver paginering. 'nopaging' => true); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); ?>
Jeg håper du likte disse eksemplene så mye som jeg gjorde mens du forberedte dem. Jeg ga spesiell oppmerksomhet på å gi varierende eksempler både for å være morsomt og å gnist din kreativitet.
Hvis du tenkte på bedre eksempler mens du leser disse, eller har spørsmål, ikke nøl med å ta en kommentar nedenfor. Og hvis du likte artikkelen, ikke glem å dele den med vennene dine!
I neste del skal vi snakke om WP_User_Query
, en av søsterklassen av WP_Query
. Ser deg da!