Så langt i denne serien har du lært hvordan WP_Query
er strukturert og hva dens egenskaper og metoder er. Nå ser vi på de ulike argumentene du kan bruke med WP_Query
og hvordan du kodes dem.
WP_Query
har et stort antall mulige argumenter, noe som gjør den ekstremt fleksibel. Som du kan bruke den til å spørre omtrent alt som holdes i din wp_posts
tabell, det har argumenter for hver permutasjon av spørring du kanskje vil kjøre på innholdet ditt.
I denne opplæringen ser jeg på argumenter for å spørre taksonomi.
Før vi starter, la oss få en rask omtale på hvordan argumenter fungerer WP_Query
. Når du kodes WP_Query
i dine temaer eller plugins må du inkludere fire hovedelementer:
hvis
og samtidig som
merker og tilbakestiller postdataI 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 (); ?>
Argumentene er hva som forteller WordPress hvilke data som skal hentes fra databasen, og det er de som jeg vil dekke her. Så alt vi fokuserer på her er den første delen av koden:
$ args = array (// Argumenter for søket ditt.);
Som du kan se, er argumentene inneholdt i en matrise. Du lærer hvordan du kodes dem mens du arbeider gjennom denne opplæringen.
Det er en bestemt måte å kode på argumentene i arrayet, som er som følger:
$ args = array ('parameter1' => 'verdi', 'parameter2' => 'verdi', 'parameter3' => 'verdi');
Du må legge inn parametrene og deres verdier i enkelt anførselstegn, bruk =>
mellom dem, og skill dem med et komma. Hvis du får feil, kan WordPress ikke legge til alle dine argumenter på spørringen, eller du kan få en hvit skjerm.
Innstilling av parametere for taksonomi betingelser er litt mer komplisert enn for kategorier og koder siden du bruker tax_query
. Innenfor dette argumentet skriver du en nestet rekke argumenter for å spesifisere taksonomien og termen ved å bruke disse parametrene:
taksonomi
(string): Taksonomi.felt
(string): Velg taksonomi termen av ('term_id
(misligholde), 'Navn'
eller 'Slug'
).vilkår
(int / snor / matrise): Taksonomi term (er).include_children
(boolean): Om ikke å ta med barn for hierarkiske taksonomier. Standard er ekte.operatør
(string): Operatør for å teste. Mulige verdier er 'I'
(misligholde), 'IKKE I'
, 'OG'
.Det faktum at du har operatør
parameter betyr at du ikke trenger å velge mellom en rekke tilgjengelige argumenter for å definere om du inkluderer eller ekskluderer vilkår (som du gjør for koder og kategorier), men bruk tax_query
for alt taksonomi-relatert i stedet.
Hvis du vil søke etter flere taksonomier, kan du også bruke relasjon
parameter før alle dine arrayer (en for hver taksonomi) med OG
eller ELLER
å angi om du vil finne innlegg med alle vilkårene eller noen av dem.
Dette er lettest forklart med noen eksempler.
Dette er det enkleste scenariet og innebærer bare å bruke en nestet array:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taksonomi', 'field' => 'slug', 'terms' => 'min-term-slug' ;
Ovennevnte spørsmål for innlegg med my-term-slug
sikt i my-taksonomi
taksonomi. Merk at du også må bruke felt
parameter for å identifisere hvilket felt du bruker til å identifisere begrepet, med mindre du bruker begrepet ID som er standard. Hvis du vil bruke begrepet ID, vil du bruke noe slikt:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taksonomi', 'vilkår' => '11')));
Ved hjelp av ID-en blir det vanskeligere for deg å identifisere hva søket ditt ser etter senere, men unngår eventuelle potensielle problemer hvis du tror at brukerne kan redigere begrepet snegler.
Hvis du vil identifisere innlegg med en eller flere av en rekke vilkår i samme taksonomi, skriver du fortsatt en nestet array, men legger til en rekke vilkår.
For eksempel, å spørre innlegg med noen av en liste over begreps-IDer fra taksonomien din, bruker du:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taksonomi', 'terms' => array ('11', '12'))));
Men hva om du ønsket å spørre innlegg med alle av disse vilkårene? Du må bruke operatør
parameter inne din nestede array:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taksonomi', 'vilkår' => array ('11', '12'), 'operator' => 'OG') ));
Vær oppmerksom på at det første eksemplet faktisk bruker I
operatør for å finne innlegg med noen av betingelsene, men da dette er standard må du ikke spesifisere det i dine argumenter.
Et annet scenario er om du vil spørre etter innlegg som ikke har noen av en rekke vilkår i en taksonomi, som du gjør slik:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taksonomi', 'terms' => array ('11', '12'), 'operator' => 'IKKE IN' )));
Her har jeg erstattet OG
operatør med IKKE I
, som betyr at WordPress vil finne innlegg uten noen av betingelsene i arrayet.
Merk at hvis du foretrekker å bruke snegler i stedet for term ID, kan du gjøre det med noen av disse scenariene. Det siste eksempelet ville se slik ut:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taksonomi', 'field' => 'slug', 'terms' => slug '),' operator '=>' IKKE IN '))));
Et annet scenario er om du vil spørre etter innlegg som har ett uttrykk, men ikke en annen. Dette bruker I
operatør (som du ikke trenger å inkludere som standard), med et minustegn før ID-en av vilkårene du vil ekskludere:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11 ', '12'))));
Denne spørringen poster med term 11, men ikke sikt 12.
Hvis du vil jobbe med mer enn én taksonomi, må du opprette mer enn én matrise. La oss se på det enkleste eksempelet, for å spørre innlegg med ett uttrykk fra taksonomi1 og ett begrep fra taksonomi2:
$ args = array ('tax_query' => array ('relation' => 'OG', array ('taxonomy' => 'taksonomi1', 'felt' => 'slug', 'terms' => array -one '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));
Her har jeg skrevet to nestede arrays: en for hver taksonomi, med de samme argumentene som jeg gjorde for eksemplene ved å bruke bare en taksonomi. Jeg har gått foran disse med relasjon
argument. Du må inkludere relasjon
argument for å fortelle WordPress om det er på jakt etter alle eller noen av innleggene som sendes ut av hver gruppe. Dette fungerer som følger:
'relasjon' => 'OG'
, WordPress henter innleggene som er angitt i den første gruppen og den andre gruppen. Så i eksemplet ovenfor, bare innlegg med både de slug-one
slug inn taxonomy1
og slug-to
slug inn taxonomy2
vil bli forespurt.'relation' => 'ELLER'
, WordPress vil hente innlegg output av den første gruppen eller den andre gruppen. Så i dette tilfellet får du innlegg med enten de slug-one
slug eller the slug-to
slug (eller begge).Dette er koden du vil bruke hvis du leter etter innlegg med en av de to sneglene:
$ args = array ('tax_query' => array ('relation' => 'ELLER', array ('taxonomy' => 'taksonomi1', 'felt' => 'slug', 'terms' => array -one '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));
Du kan også lete etter mer enn ett begrep i en gitt taksonomi ved å legge den til i gruppen:
$ args = array ('tax_query' => array ('relation' => 'ELLER', array ('taxonomy' => 'taksonomi1', 'felt' => 'slug', 'terms' => array -one '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' termer '=> array (' slug-two ',' slug-three '))));
Ved å kombinere relasjon
argument med nestede spørringer også ved hjelp av operatør
argument, du kan lage ganske komplekse spørringer. Argumentene nedenfor vil spørre innlegg med et begrep fra en taksonomi, men uten et begrep fra en annen taksonomi:
$ args = array ('tax_query' => array ('relation' => 'OG', array ('taxonomy' => 'taksonomi1', 'felt' => 'slug', 'terms' => array -one '),' operator '=>' INGEN '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ' ));
Legg merke til at jeg har brukt 'relasjon' => 'OG'
her: hvis jeg brukte ELLER
, det ville spørre innlegg med slug-to
og innlegg uten slug-one
, heller enn innlegg som har slug-to
men ikke slug-one
, som er det jeg leter etter.
Du kan tenkelig ta dette videre for å spørre taksonomiens vilkår, men du ville: bruke operatør
argument i begge nestede spørringer eller legge til en ekstra nestet spørring for å spørre vilkår i en annen taksonomi.
Du lurer kanskje på hvorfor jeg ikke har tatt med avgift
argument, hvor du bare skriver ditt argument som følger:
$ args = array ('taxonomy1' => 'slug-one');
Du kan være kjent med denne måten å spørre taksonomier hvis du har gjort det tidligere, men det er nå avskrevet, og du bør ikke bruke det. Så hold deg til 'Tax_query'
! Ved hjelp av tax_query
gir deg mye mer fleksibilitet uansett.
Spørrende taksonomier er litt mer komplisert enn kategorier og koder, som du trenger for å få tak i tax_query
argument.
Men som vi har sett, er dette et veldig kraftig argument som gir deg mye omfang og fleksibilitet til å spørre databasen din uansett hva du ønsker.