Hvis du designer eller utvikler WordPress-temaer eller plugins, er det en god sjanse for at du en dag trenger å gjøre et spørsmål om tilpassede metafelt. Dette er de helt egendefinerte nøkkel- / verdiparene du kan knytte til ethvert innlegg, side eller tilpasset innleggstype. WordPress har et grunnleggende brukergrensesnitt for dem som standard, eller du kan bruke noe sånt som Advanced Custom Fields for å bli fancy med dem. Men under panseret bruker ACF vanlige olje-tilpassede felt.
Denne siden du ser på akkurat nå, ble skrevet i 1999. På det tidspunktet, for å kunne søke etter innlegg med bestemte egendefinerte felt, må du bruke den globale variabelen `$ wpdb`. Det kan brukes til å lage MySQL-spørsmål som WordPress WP_Query () -klassen ikke støtter. Heldigvis i dag har WordPress argumenter som støtter spørsmål for tilpassede metafelt.
Her vil vi dekke de forskjellige måtene du kan be om og løpe på innlegg med bestemte tilpassede felt (og deres verdier). Du vil kunne bruke denne informasjonen enten du bruker WP_Query
klassen query_posts()
, eller get_posts()
. Siden query_posts()
og get_posts()
er innpakninger for WP_Query
klassen. De godtar alle de samme argumentene.
Spørsmålsargumentene
Her er et grunnleggende eksempel på et WordPress-spørsmål hentet fra WordPress Codex.
have_posts() ) ( echo '
'; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
- ' . get_the_title() . '
'; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();
Det $args
er den viktige biten der. Vi vil gi forskjellige argumenter for å få dette til å fungere slik vi vil.
Når du spør etter tilpasset meta, er det to "grupper" av argumenter du kan bruke. Den ene gruppen er for et enkelt tilpasset metafeltforespørsel og den andre gruppen for mer komplekse forespørsler om tilpassede metafelt. La oss starte med den enkle gruppen.
meta_key
Det meta_key
argumentet vil spørre noen innlegg som har det egendefinerte feltet meta-ID lagret i databasen, hvorvidt det er en verdi lagret for feltet. Det meta_key
er ID-en du gir til metafeltene dine. Som dette:


Dette eksemplet vil spørre ethvert innlegg som har det tilpassede metafeltet med IDen "felt1".
$args = array( 'meta_key' => 'field1' );
meta_value
Det meta_value
argumentet spør innlegg som har verdien du definerer. Det meta_value
argument som brukes for strengverdier. Dette eksemplet vil søke etter innlegg med et tilpasset metafelt som har verdien "data1".
$args = array( 'meta_value' => 'data1' );
Du kan også kombinere de to. Dette eksemplet vil bare spørre innlegg som har det egendefinerte metafeltet med ID-en for "felt1" som har verdien "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Argumentet meta_value_num ligner argumentet `meta_value`. Når meta_value
argumentet er ment for strengverdier, meta_value_num
er det ment for numeriske verdier.
Dette eksemplet viser hvordan du kan søke etter "felt1" tilpasset metafelt hvis det har verdien "10".
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
Det meta_compare
argumentet gjør akkurat hva det høres ut. Det lar deg bruke komparatorer med argumentene `meta_value` og` meta_value_num`. Komparatorene du kan bruke er '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'MELLOM', 'IKKE MELLOM', 'IKKE BESTÅR', 'REGEXP', 'IKKE REGEXP' eller 'RLIKE'. Her er et eksempel som viser hvordan du kan søke på innlegg som ikke har verdien "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Flere komplekse spørsmål
meta_query
Hovedargumentet du vil bruke for komplekse spørsmål er meta_query
. Dette argumentet alene gjør ikke noe. Det forteller bare WordPress at du vil lage et spørsmål om tilpassede metafelt. Du vil legge til flere argumenter i det meta_query
som skal brukes til å definere spørringen.
nøkkel, verdi og sammenlign
Den argumenter key
, value
fungerer nøyaktig på samme måte som meta-key
, meta-value
som beskrevet ovenfor. Komplekset compare
ligner på det enkle compare
ovenfor, men det tar en annen liste over komparatorer. Komplekset compare
bruker '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'MELLOM ',' IKKE MELLOM ',' EXISTER 'eller' NOT EXISTS '. value
kan være en matrise, men bare når sammenligningen bruker 'IN', 'NOT IN', 'MELLOM' eller 'IKKE MELLOM'.
Hvis du bruker 'EXISTS', eller 'NOT EXISTS' med compare
, trenger du ikke spesifisere et value
argument.
Her er et eksempel som vil spørre innlegg hvis det har "felt1" med verdien "data1", og "field2" med verdien som ikke er "data2".
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
forhold
Den relation
brukes når du vil spørre om tilpassede metadata ved hjelp av et logisk forhold. Du kan bruke AND
eller OR
. For eksempel vil du bruke AND
til å sammenligne om data1 og data2 oppfyller kriteriene, og du bruker OR
hvis data1 eller data2 oppfyller kriteriene.
Dette argumentet er frittstående. Det betyr at det ikke vises i individuelle parametere for metafeltet. La oss se på et eksempel. Dette eksemplet vil bare spørre innlegg som har "felt1" med verdien "data1", og "field2" med verdien av "data2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Hvis du endret relation
til “ELLER”. Deretter vil det spørre om alle innlegg hvis "felt1" har verdien "data1", eller hvis "field2" har verdien "data2".
type
Det type
argumentet lar deg velge hvilken type data til spørring. Du kan bruke 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME' eller 'UNSIGNED'.
“DATE” -typen kan bare brukes med compare
“MELLOM” hvis datoformatet er “ÅÅÅÅMMDD”.
Dette eksemplet vil spørre ethvert innlegg der verdien av "felt1" er numerisk.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Ekte verdenseksempel
Så langt har jeg bare gitt eksempler med vilkårlige data og felt. Nå vil jeg vise deg et eksempel fra den virkelige verden om å spørre om tilpassede metafelt.
Scenarioet
Du har opprettet en tilpasset innleggstype for hendelser. Hendelsens innleggstype har et egendefinert datofelt med ID-en event_date
. Du vil opprette et spørsmål som viser eventuelle hendelser som starter på den gjeldende datoen de neste 30 dagene.
Vi skal bruke meta_query
argumentet slik vi vil bruke type
argumentet til å definere "event_date" -feltet som "DATE" datatype.
Dette er spørringen:
$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );
Dette value
er en matrise med gjeldende dato - 1 dag og 31 dager fra dagens dato. Siden vi bruker komparatoren "MELLOM" vil bare innleggene mellom verdiordingen bli spurt, så vi vil motregne dem med en dag.
Med dette spørsmålet vil du vise alle hendelser som skjer i løpet av de neste 30 dagene.
Konklusjon
Den WP_Query
klassen er en svært fleksibel klasse som vil tillate deg å lage en rekke egendefinerte spørringer. Hvis du vil lære mer om de forskjellige argumentene du kan bruke til spørsmål, anbefaler jeg at du ser gjennom WP_Query
codex-siden.