WP_Query Argumenter Egendefinerte felt

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.

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 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.

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.

Tilpassede feltparametere

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.

Parametre for enkle egendefinerte feltfelter

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.

Bruke meta_compare Argument

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.

Nested Custom Field Queries

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.

Sammendrag

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.