Mastering WP_Query En introduksjon

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:

  • Hva er WP_Query?
  • Hvorfor bruke WP_Query?
  • Potensielle problemer / hva du skal være oppmerksom på.

Hva er 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:

  • Argumentene for spørringen, ved hjelp av parametere som vil bli dekket i detalj i denne serien
  • selve spørringen
  • sløyfen, som vil sende ut innhold, titler eller hva du vil vise
  • Etterbehandling: lukking hvis og mens koder og tilbakestilling av postdata

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.

Tilbakestille postdata

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.

Hvorfor bruke WP_Query?

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.

Hvorfor bruke WP_Query over andre metoder?

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:

Når du kan bruke WP_Query

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:

  • For å legge til en liste over relaterte innlegg under den nåværende posten, for eksempel en liste over alle innlegg i samme kategori.
  • For å lage to looper på samme side: for eksempel en FAQ-side med spørsmålstegnene øverst og innholdet under.
  • Hvis du vil opprette en egendefinert liste over de siste innleggene i sidelinjen eller bunnteksten på nettstedet ditt, når widgeten Nylige innlegg ikke gjør det du trenger (eller du vil heller kodes det selv).
  • For å lage egendefinerte søk for taksonomier, bruk mer enn en taksonomi for å definere hva som vises.
  • For å søke etter posttyper som ikke sendes ut av standard spørringen, for eksempel vedlegg.
  • For å lage egendefinerte sider med en rekke spørringer for forskjellige innholdstyper, som jeg har gjort på dette eksemplets nettsted for en klient.

Noen advarsler

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å:

  • Hvis alt du vil gjøre er å endre måten innlegg vises for en bestemt innholdstype eller arkiv, ikke bruk WP_Query. I stedet lager du bare en malfil for det arkivet eller innholdstypen, og endrer sløyfen i den malfilen.
  • Hvis du vil vise noen få eller færre innlegg enn det som normalt vises på en arkivside (for eksempel ikke viser en bestemt kategori), ikke bruk 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.
  • Pass på å kjøre for mange søk på en side. Du kan teoretisk lage en side med hundrevis av tilpassede spørringer, men bare tenk på serverbelastningen. Hvis du trenger mer enn fire eller fem spørringer på en side, vil du kanskje vurdere å lage ekstra sider.

Sammendrag

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.