Tilpasset løkke / spørring basert på egendefinerte felt - CSS-triks

Anonim
Sist oppdatert av Jason Witt.

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_Queryklassen query_posts(), eller get_posts(). Siden query_posts()og get_posts()er innpakninger for WP_Queryklassen. 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 $argser 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_keyargumentet 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_keyer 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_valueargumentet spør innlegg som har verdien du definerer. Det meta_valueargument 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_valueargumentet er ment for strengverdier, meta_value_numer 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_compareargumentet 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_querysom skal brukes til å definere spørringen.

nøkkel, verdi og sammenlign

Den argumenter key, valuefungerer nøyaktig på samme måte som meta-key, meta-valuesom beskrevet ovenfor. Komplekset compareligner på det enkle compareovenfor, men det tar en annen liste over komparatorer. Komplekset comparebruker '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'MELLOM ',' IKKE MELLOM ',' EXISTER 'eller' NOT EXISTS '. valuekan 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 valueargument.

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 relationbrukes når du vil spørre om tilpassede metadata ved hjelp av et logisk forhold. Du kan bruke ANDeller OR. For eksempel vil du bruke ANDtil å sammenligne om data1 og data2 oppfyller kriteriene, og du bruker ORhvis 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 relationtil “ELLER”. Deretter vil det spørre om alle innlegg hvis "felt1" har verdien "data1", eller hvis "field2" har verdien "data2".

type

Det typeargumentet 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_queryargumentet slik vi vil bruke typeargumentet 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 valueer 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_Queryklassen 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_Querycodex-siden.