Som standard vil WordPress kjøre et spørsmål på hver side som nettstedet ditt viser, hvis art vil bli bestemt av typen side som vises. Så hvis en statisk side blir vist, kjører WordPress et spørsmål for å vise siden med den aktuelle IDen, mens hvis en arkivside blir vist, vil søket hente alle innlegg i det arkivet.
Men noen ganger vil du gjøre ting litt annerledes. Enten i sidens hovedinnhold eller andre steder på siden (for eksempel i sidefeltet eller bunnteksten), vil du kanskje vise noe spesifikt innhold som ikke blir sendt ut av standard spørringen.
Den gode nyheten er at WordPress gjør det mulig med WP_Query
klasse. Denne klassen gir deg et stort antall parametere du kan bruke til å definere hvilket innhold du vil sende ut (som ikke må begrenses til innlegg) og deretter skrive en sløyfe som viser innholdet nøyaktig slik du vil.
I denne nittenparten serien om Mastering WP_Query
, Baris Unver, og jeg tar deg gjennom inn og ut av WP_Query
slik at når du har fullført serien, kan du bruke den i en rekke scenarier og finjustere måten WordPress spørrer dataene i nettstedets database.
I denne introduksjonen vil jeg dekke følgende:
WP_Query
?WP_Query
?WP_Query
er en klasse levert av WordPress. Det faktum at det er en klasse betyr at du ved å bruke det raskt kan få tilgang til variablene, kontrollene og funksjonene som er kodet inn i den klassen i WordPress-kjerne, uten å måtte bekymre seg for å skrive all den koden selv. Dette gjør at koden din er mer effektiv og pålitelig.
Hvis du vil forstå nøyaktig hvordan WP_Query
Fungerer under hetten, du kan se koden i omfatter / query.php
fil.
WP_Query
består av fire hovedelementer:
I praksis vil dette se ut som følgende:
have_posts ()) // Start looping over spørringsresultatene. mens ($ query-> have_posts ()) $ query-> the_post (); // Innholdet i de forespurte postresultatene går her. // Gjenopprett originale innleggsdata. wp_reset_postdata (); ?>
Du kan definere dine argumenter når du skriver spørringen selv, men jeg foretrekker å definere de først, da det holder ting pent.
I eksemplet ovenfor har jeg lagt til wp_reset_postdata ()
etter hvert spørsmål. Dette er viktig fordi det tilbakestiller spørringen tilbake til hovednavnet som kjøres på den siden.
For eksempel, hvis du bruker WP_Query
å kjøre en spørring i sidefeltet ved hjelp av wp_reset_postdata ()
forteller effektivt WordPress at vi fortsatt er på hvilken side som blir sett og at den skal fungere med standard spørringen for den aktuelle siden.
Hvis du ikke gjør dette, kan noen andre spørsmål som kjøres på siden (inkludert standard spørringen) bryte, og eventuelle betingede koder som sjekker hvilken type side som vises, vil ikke fungere.
Hvis du ikke har brukt WP_Query
klasse før, kan du lure på hvorfor du skal begynne. Her skal jeg fokusere på to aspekter av dette: hvorfor bruke WP_Query
over andre metoder for å skrive tilpassede spørringer, og scenarier der du kanskje vil bruke WP_Query
.
WP_Query er ikke den eneste metoden for å lage et tilpasset søk. Det er fire flere:
pre_get_posts
get_posts ()
get_pages ()
query_posts ()
(som du bør unngå, som jeg vil forklare)Jeg kommer ikke til å gå inn i mye detalj om hvordan hver av disse fungerer, men det er nyttig å vite når de brukes:
pre_get_posts
er en krok som endrer hovedspørsmålet. Du kan bruke det med en betinget kode for å sjekke om en bestemt type side blir vist (for eksempel hjemmesiden) og bruk den til å endre spørringen som kjøres (for eksempel for å fjerne de tre siste innleggene, hvis du ' re viser dem andre steder på siden). Det er en svært effektiv måte å endre hovednavnet på og bør være din første anløpshavn hvis det er det du vil gjøre. Men du kan ikke bruke den til å opprette en helt ny forespørsel.get_posts ()
og get_pages ()
er veldig like, med den største forskjellen som er åpenbar fra navnene sine. Disse malene bruker faktisk WP_Query
klassen, så de er en annen måte å gjøre det samme på, men legger til et ekstra skritt fordi de kaller WP_Query
klasse i stedet for å gjøre det direkte. Du kan bare bruke dem til å spørre om innlegg eller sider, mens WP_Query
i seg selv er kraftigere og lar deg spørre nesten hva som helst i databasen din.query_posts ()
endrer hovedspørsmålet, men bør ikke brukes i plugin eller temaer. Dette skyldes at det kaster ut hovedspørsmålet og starter helt på nytt, og erstatter hovedspørsmålet med en ny forespørsel. Det er også utsatt for feil, spesielt med paginering, og er ineffektiv og vil påvirke sidetilpasningstider. Hvis du trenger å endre hovedspørsmålet, bruk pre_get_posts
i stedet, og hvis du vil lage en helt ny spørring, bruk WP_Query
.Diagrammet nedenfor, utgitt av Andrey "Rarst" Savchenko under Creative Commons-lisens, gir en følelse av dette:
Det er mange scenarier når WP_Query
vil komme til nytte, og jeg kan ikke dekke dem alle her, men her er en oversikt:
De WP_Query
klassen er flott. Jeg lager mange nettsteder som trenger tilpassede spørringer, så jeg bruker det ofte. Men det kommer ikke uten sine ulemper. Her er noen ting du bør være oppmerksom på:
WP_Query
. I stedet lager du bare en malfil for det arkivet eller innholdstypen, og endrer sløyfen i den malfilen.WP_Query
for å lage en helt ny spørring. Bruk i stedet pre_get_posts
å endre hovednavnet, sammen med en betinget kode for å finne ut hvor akkurat du vil gjøre det.De WP_Query
klassen er et kraftig og ekstremt nyttig verktøy for å lage egendefinerte søk og gjøre ditt WordPress-nettsted oppfører seg akkurat som du vil ha det til. Som vi har sett, er det tidspunkter når du vil bruke andre metoder for å lage egendefinerte søk, men det har et bredt spekter av bruksområder.
I resten av denne serien tar vi deg gjennom detaljene om hvordan du bruker WP_Query
og få mest mulig ut av det.