WP_Query Argumenter Taxonomier

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.

Et sammendrag om hvordan argumenter fungerer i WP_Query

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:

  • Argumentene for spørringen, ved hjelp av parametere som vil bli dekket i denne opplæringen
  • selve spørringen
  • løkken
  • Etterbehandling: lukking hvis og samtidig som merker og tilbakestiller 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 (); ?>

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.

Koding av dine argumenter

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.

Taxonomiparametrene

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.

Spør etter en Taxonomy Term

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.

Spør etter flere vilkår i en taxonomi

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.

Spørrende vilkår fra flere taxonomier

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:

  • Hvis du bruker '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.
  • Hvis du bruker '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.

En kommentar på skatten Argument

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.

Sammendrag

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.