Hvis du har fulgt denne serien, har du en forståelse av hvordan WP_Query
er strukturert og hvordan du bruker den til å skrive tilpassede spørringer. For å kunne definere hva WP_Query
hentes fra databasen, må du vite hvilke argumenter du kan bruke til å spørre data.
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å argumentene for egendefinerte felt. Men først, en rask omtale på hvordan du koder argumenter 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:
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 forteller WordPress hvilke data som skal hentes fra databasen, og det er de som jeg dekker 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.
Egendefinerte felt, også kjent som postmetadata, kan bruke en egen klasse som heter WP_Meta_Query
. Dette betyr at hvis du vil kjøre en forespørsel bare for postmetadata, kan du bruke enten WP_Meta_Query
eller WP_Query
(som åpner WP_Meta_Query
), mens du vil spørre etter postmetadata og andre elementer som posttype, bruker du WP_Query
.
De WP_Meta_Query
klassen er dekket i detalj andre steder i denne serien, så jeg vil ikke gå nærmere på det her, men den viktigste forskjellen mellom å bruke det og WP_Query
er det WP_Query
lar deg lage noen enkle argumenter uten å bruke nestede arrays.
De viktigste parameterne for bruk WP_Query
å søke etter egendefinerte felt er som følger:
meta_key
(string): Tilpasset feltnøkkel.meta_value
(string): Tilpasset feltverdi.meta_value_num
(Nummer): Tilpasset feltverdi.meta_compare
(string): Operatør for å teste 'Meta_value'
. Mulige verdier er '='
, '! ='
, '>'
, '> ='
, '<'
, '<='
, 'SOM'
, 'IKKE LIKE'
, 'I'
, 'IKKE I'
, 'MELLOM'
, "IKKE MELLOM"
, "IKKE EXISTERER"
, 'REGEXP'
, 'IKKE REGEXP'
eller 'RLIKE'
. Standardverdien er '='
.Bruk disse parameterne for et enkelt tilpasset feltfelt. Så for eksempel å skrive ut innlegg som har et egendefinert felt med nøkkelen nøkkel1
(uavhengig av verdien), bruker du dette argumentet:
$ args = array ('meta_key' => 'key1');
Dette ville returnere alle innlegg med et egendefinert felt med nøkkel1
nøkkel, uansett verdien.
Hvis du ønsket å spesifisere en verdi, ville du legge til et ekstra argument for det:
$ args = array ('meta_key' => 'key1', 'meta_value' => 'value1');
Dette ville returnere alle innlegg med et egendefinert felt med nøkkel1
nøkkel og verdi1
verdi for det.
Alternativt kan du hente alle innlegg med et egendefinert felt med verdien verdi1
, uavhengig av nøkkelen. Dette kan være nyttig der du har flere egendefinerte feltnøkler med dupliserte verdier:
$ args = array ('meta_value' => 'value1');
Så som du kan se, kan du søke etter bare det egendefinerte feltets nøkkel eller verdi - du trenger ikke alltid å spesifisere begge.
Du har kanskje lagt merke til at det er mange potensielle parametere for meta_compare
argument, og bruken av dem kan ikke alltid være umiddelbart tydelig. La oss ta en titt på de som du kanskje bruker mest:
=
: Er lik. Dette er standard, så hvis du ikke inkluderer en meta_compare
argument, dette er hva WP_Query vil bruke.!+
: Er ikke lik.>
: Større enn.> =
: Større enn eller lik.<
: Mindre enn.<=
: Mindre enn eller lik.SOM
: Dette vil ignorere tilfelle av verdien du bruker, og du kan også bruke den med jokertegn for å finne verdier som verdien du leter etter.IKKE LIKE
: Fungerer på samme måte som LIKE, men spør motsatt!I
: Bruk dette med en matrise i argumentet "Verdi" for å finne innlegg med en eller flere av verdiene i matrisen.MELLOM
: Bruk med en rekke to numeriske verdier (angitt i meta_value
argument) for å finne innlegg med en egendefinert feltverdi mellom disse verdiene (men ikke lik dem).IKKE MELLOM
: Forespørsler innlegg med egendefinerte feltverdier utenfor en rekke to numeriske verdier spesifisert av meta_value
argument.La oss ta en titt på noen eksempler på bruksområder av dette argumentet.
For det første kan du ekskludere egendefinerte feltnøkler eller verdier ved hjelp av meta_compare
argument. Så for å hente alle innlegg unntatt de med et egendefinert felt med nøkkel1
nøkkel, du vil bruke dette:
$ args = array ('meta_key' => 'key1', 'meta_compare' => '! =');
Du kan også bruke 'IKKE I'
verdi for meta_compare
argument, som også kan brukes med en streng med flere verdier:
$ args = array ('meta_key' => 'key1, key2', 'meta_compare' => 'IKKE IN');
Dette vil spørre innlegg som ikke har egendefinerte felt med nøkkel1
eller key2
verdier. Hvis du vil være mer spesifikk, kanskje spørre etter innlegg med ett egendefinert felt og ikke en annen, bruker du et nestet array, som vi snart kommer til.
Eksemplene ovenfor bruker ikke-numeriske verdier. Du kan bruke WP_Query
med egendefinerte felt som har numeriske verdier, ikke bare for å hente innlegg med et egendefinert felt med den verdien, men også å hente dem med egendefinerte felt med høyere eller lavere verdier. Du kan bruke dette i en butikk for eksempel hvis du ser etter varer over eller under en gitt pris.
For å finne innlegg med en egendefinert feltverdi over et gitt nummer, bruk noe slikt:
$ args = array ('meta_key' => 'numkey', 'meta_value' => '100', 'meta_compare' => '>');
Dette ville returnere alle innlegg med et egendefinert felt med numkey
nøkkel og en verdi på over 100
. Hvis du ønsket å spørre om verdier på 100 eller over, ville du bruke 'meta_compare' => '> ='
.
Du kan også finne innlegg hvis egendefinerte felt har verdier mellom to tall du angir ved hjelp av MELLOM
argument og en matrise:
$ args = array ('meta_key' => 'numkey', 'meta_value' => array ('100', '200'), 'meta_compare' => 'MELLOM');
Dette vil finne alle innlegg med en verdi i numkey
egendefinert felt mellom 100 og 200.
Hvis du vil spørre etter mer enn ett egendefinert felt eller bruke flere enn en operatør, kan du bruke en nestet array.
Disse tar følgende struktur:
$ args = array ('meta_query' => array ('relation' => ", / Valgfri argument. array (// 'meta_query' argumenter går her.));
Måten du strukturerer på 'Meta_query'
argument i WP_Query
er akkurat det samme som hvordan du gjør det ved hjelp av WP_Meta_Query
klassen, som er dekket i en senere opplæring i denne serien, så jeg vil ikke duplisere det her.
Siden WordPress versjon 4.1 kan du også bruke flere nivåer av nestet array for å skape stadig mer komplekse og presise søk. Disse ser noe ut som dette:
$ args = array ('meta_query' => array ('relation' => "/ / Valgfritt argument. array ('relation' =>", array (// Første sett med 'meta_query' argumenter gå her.) (// Andre sett med 'meta_query' argumenter går her.))));
Dette lar deg bruke forskjellige relasjoner på forskjellige nivåer i spørringen, for eksempel spørre etter innlegg med en verdi i en egendefinert feltnøkkel, eller med begge to verdier i en annen egendefinert feltnøkkel. Dette er dekket nærmere, med eksempler, i opplæringen på WP_Meta_Query
klassen, som er en del av denne serien.
Bruker WP_Query
klasse for å spørre metadataene dine (eller egendefinerte felt) gir deg stor fleksibilitet, med flere potensielle argumenter kombinert med en rekke operatører for å hjelpe deg med å spørre databasen din akkurat slik du vil.
Hvis du bare vil bruke post-metadata-argumenter i spørringen din (og ikke kombinere den med andre argumenter, for eksempel for posttyper), kan du også bruke WP_Meta_Query
klassen, som dekkes senere i denne serien.