I de tidligere delene av denne serien har du lært hvordan WP_Query
er strukturert og hva dens egenskaper og metoder er. Det neste trinnet er å forstå de forskjellige argumentene du kan bruke med det, og hvordan det er best å gjøre det.
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å to typer argument, for følgende:
Argumentene for disse to taksonomiene er liknende, men har noen forskjeller du trenger å vite om du skal bruke dem effektivt.
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:
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.
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.
La oss starte med kategoriparametere. Alternativene du har her er som følger:
katt
(int): bruk kategori id.kategori navn
(string): bruk kategori slug (ikke navn).category__and
(matrise): bruk kategori id.category__in
(matrise): bruk kategori id.category__not_in
(matrise): bruk kategori id.Merk at for ingen av disse bruker du navnet på din kategori. Tilogmed kategori navn
parameteren tar sluggen som sin verdi, ikke dens navn. Jeg pleier å bruke denne en i stedet for ID-en, som når jeg kommer tilbake til koden min på et senere tidspunkt, er snegler enklere å identifisere enn ID-er. Men hvis du tror at brukerne på nettstedet ditt kan endre sluggen for en eller flere kategorier, anbefaler jeg at du bruker IDen for å unngå problemer.
La oss ta en titt på hvordan du bruker hver av disse.
De katt
parameteren er enkel: bruk bare en enkelt kategori-ID eller en streng av kategori-IDer.
Søke etter en kategori ser slik ut:
$ args = array ('cat' => '12');
Søke etter flere kategorier ser slik ut:
$ args = array ('cat' => '12, 13, 14 ');
Ovenstående vil fortelle WordPress å hente innlegg som er i noen av kategoriene som er oppført. Hvis du vil finne innlegg i hver av en rekke kategorier, bruker du category_and
parameter, hvorav mer kort tid.
Du kan også bruke katteparameteren til å finne innlegg som er i en kategori, men ikke en annen, ved å bruke et minustegn før kategoridokumentet som følger:
$ args = array ('cat' => '12, -13 ');
Ovennevnte ville spørre innlegg i kategori 12
men ikke i kategorien 1. 3
.
De kategori navn
parameter bruker kategorien slug, ikke navnet (forvirrende, jeg vet!). Igjen kan du bruke den med en enkelt kategori eller med en rekke kategorier for å finne innlegg som er i noen av kategoriene.
For å spørre innlegg i en enkelt kategori legger du til:
$ args = array ('category_name' => 'my-slug');
Og for å finne innlegg i en eller flere av en rekke kategorier, bruk dette:
$ args = array ('category_name' => 'my-slug, din slug, en annen-slug');
Som med katteparameteren, vil dette ikke finne innlegg som er inne alle av kategoriene, men det vil finne innlegg i noen av kategoriene.
Hvis du vil finne innlegg som er i en rekke kategorier, er dette parameteren du bruker. Det tar kategori ID-ene for sin verdi. Så for å finne innlegg i alle tre kategoriene, ville du bruke:
$ args = array ('category__and' => array ('12', '13', '14'));
Vær oppmerksom på at dette bruker et array ikke en streng, så du kodes det annerledes. Parameteren har to understreker i navnet: Bruk bare en og det vil ikke fungere.
Den neste parameteren ser etter innlegg i en eller flere av en rekke kategorier. Den fungerer faktisk på samme måte som kattparameteren, og tar også kategorien ID som sin verdi.
Så for å spørre innlegg i en eller flere av en rekke kategorier, ville du bruke:
$ args = array ('category__in' => array ('12', '13', '14'));
Ovennevnte ville hente innlegg fra en eller flere av disse kategoriene.
De category__not_in
parameteren gjør det som du forventer: det spørre innlegg som ikke er i en kategori eller en rekke kategorier.
Hvis du vil ekskludere innlegg fra en kategori, bruker du følgende:
$ args = array ('category__not_in' => '12');
Og for å ekskludere innlegg fra en rekke kategorier:
$ args = array ('category__not_in' => array ('12', '13', '14'));
Dette ville utelate innlegg fra noen av disse kategoriene.
Etiketter har litt forskjellige parametere fra kategorier: Du kan ikke finne ut hva de kan være basert på din kunnskap om kategoriparametere, jeg er redd!
Etikettparametrene er:
stikkord
(string): bruk tag slug.tag_id
(int): bruk tag ID.tag__and
(matrise): bruk tag ids.tag__in
(matrise): bruk tag ids.tag__not_in
(matrise): bruk tag ids.tag_slug__and
(matrise): bruk tag snegler.tag_slug__in
(matrise): bruk tag snegler.La oss se på hver av disse.
De stikkord
parameteren tar tagsluggen for sin verdi og kan brukes til å finne innlegg med en tag eller med en hvilken som helst av en streng av koder.
Så for å finne innlegg med en tag du bruker:
$ args = array ('tag' => 'my-tag');
Og for å finne innlegg med tagger fra en rekke tagger:
$ args = array ('tag' => 'my-tag, din-tag, en annen tag');
Merk at de ovennevnte spørringene innlegger med noen av kodene i arrayet, ikke alle av dem.
De tag_id
parameteren fungerer på samme måte som katt
parameter: det tar tag-ID og kan brukes med en enkelt kode eller flere koder.
For å finne innlegg med en enkelt tag bruker du dette:
$ args = array ('tag_id' => '21');
For å finne innlegg med en eller flere tagger fra en streng med tag-IDer:
$ args = array ('tag_id' => '21, 22, 23 ');
Du kan også bruke tag_id
å ekskludere koder, enten når du bruker den til enkeltkoder eller flere koder.
Så for å spørre innlegg, unntatt de med en gitt tag, vil du bruke:
$ args = array ('tag_id' => '-21');
Mens du finner innlegg med en av to koder, men uten en annen tag, bruker du dette:
$ args = array ('tag_id' => '21, -22, 23 ');
Så ovenfor vil spørre innlegg med en eller begge tagger 21
eller 23
men ikke tagg 22
.
Denne parameteren lar deg finne innlegg med en eller flere av en rekke koder. Det fungerer på samme måte som stikkord
når det brukes med en matrise:
$ args = array ('tag_in' => array ('21', '22', '23'));
Dette vil spørre innlegg med noen eller alle taggene som er oppført. Hvis du vil finne innlegg med alle kodene, bruker du tag__and
, som jeg vil dekke i et øyeblikk.
De tag__not_in
parameteren lar deg spørre innlegg som ikke har en gitt tag eller et utvalg av koder.
Bruk den som denne for å ekskludere en tag:
$ args = array ('tag__not_in' => array ('21'));
Legg merke til at du fortsatt trenger å bruke en matrise, selv om du bare bruker en tagg. For flere koder, bruk:
$ args = array ('tag__not_in' => array ('21', '22', '23'));
Dette vil spørre innlegg som ikke har noen av de ovennevnte kodene.
Disse to parametrene oppfører seg på nøyaktig samme måte som tag__and
og tag__in
parametere, bortsett fra at du bruker den taggen sluggen i dine arrayer i stedet for tag-ID.
Så for eksempel å finne innlegg som har begge et par koder, bruker du tag__slug_in
:
$ args = array ('tag_slug__in' => array ('my-tag', 'din-tag', 'annen tag'));
Dette finner innlegg med noen av disse kodene. Du kan også bruke tagparameteren med en streng av taggrop for å oppnå det samme resultatet.
For å inkludere innlegg med alle et sett med koder, bruk tag_slug__and
:
$ args = array ('tag_slug__and' => array ('min-tag', 'din-tag', 'annen tag'));
I stedet for å spørre innlegg med noen av kodene, spør dette bare etter innlegg som har alle av kodene.
Å spørre innleggene dine etter kategori og / eller tag er noe, det er en god sjanse for at du får anledning til å gjøre det WP_Query
. Ved å bruke argumentene ovenfor, og kombinere dem om nødvendig, kan du lage kraftige argumenter for å trekke ut nøyaktig de dataene du trenger fra databasen.