Hvis du designer eller udvikler WordPress-temaer eller plugins, er der en god chance for, at du en dag bliver nødt til at lave en forespørgsel om tilpassede metafelter. Dette er de helt tilpassede nøgle / værdipar, som du kan vedhæfte til ethvert indlæg, side eller tilpasset indlægstype. WordPress har en grundlæggende brugergrænseflade til dem som standard, eller du kan bruge noget som Advanced Custom Fields for at få lyst til dem. Men under emhætten bruger ACF regelmæssige ol 'brugerdefinerede felter.
Denne meget uddragsside, du ser på lige nu, blev skrevet i 1999. På det tidspunkt skulle du bruge den globale variabel '$ wpdb' for at kunne søge efter indlæg med bestemte brugerdefinerede felter. Det kan bruges til at oprette MySQL-forespørgsler, som WordPress WP_Query () -klassen ikke understøtter. Heldigvis i dag har WordPress argumenter, der understøtter forespørgsler om tilpassede metafelter.
Her dækker vi de forskellige måder, du kan anmode om og løbe indlæg med bestemte brugerdefinerede felter (og deres værdier). Du kan bruge disse oplysninger, uanset om du bruger WP_Query
klassen query_posts()
, eller get_posts()
. Siden query_posts()
og get_posts()
er indpakninger til WP_Query
klassen. De accepterer alle de samme argumenter.
Forespørgselsargumenterne
Her er et grundlæggende eksempel på en WordPress-forespørgsel taget 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 vigtige bit der. Vi sender forskellige argumenter for at få dette til at fungere, som vi vil.
Når du spørger efter tilpasset meta, er der to "grupper" af argumenter, som du kan bruge. Den ene gruppe er for en simpel brugerdefineret metafeltforespørgsel og den anden gruppe for mere komplekse forespørgsler om brugerdefinerede metafelt. Lad os starte med den enkle gruppe.
meta_key
Det meta_key
argument vil forespørge nogen indlæg, der har det brugerdefinerede felt meta-id gemt i databasen, om der er en værdi gemt for feltet. Det meta_key
er det id, du giver til dine metafelter. Sådan her:


Dette eksempel spørger ethvert indlæg, der har det brugerdefinerede metafelt med id'et "felt1".
$args = array( 'meta_key' => 'field1' );
metaværdi
Det meta_value
argument forespørgsler indlæg, der har den værdi, du definerer. Den meta_value
argument bruges til strengværdier. Dette eksempel vil forespørge på alle indlæg med et brugerdefineret metafelt, der har værdien "data1".
$args = array( 'meta_value' => 'data1' );
Du kan også kombinere de to. Dette eksempel spørger kun indlæg, der har det brugerdefinerede metafelt med id'et "felt1", der har værdien "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_værdi_nummer
Argumentet meta_value_num svarer til argumentet `meta_value`. Hvor meta_value
argumentet er ment for strengværdier, meta_value_num
er det beregnet til numeriske værdier.
Dette eksempel viser, hvordan man forespørger "felt1" tilpasset metafelt, hvis det har en værdi på "10".
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
Det meta_compare
argument gør præcis hvad det lyder som. Det giver dig mulighed for at bruge komparatorer med argumenterne 'meta_value' og 'meta_value_num'. De komparatorer, du kan bruge, er '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'MELLEM', 'IKKE MELLEM', 'IKKE FINDES', 'REGEXP', 'IKKE REGEXP' eller 'RLIKE'. Her er et eksempel, der viser, hvordan man forespørger på indlæg, der ikke har værdien "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Mere komplekse forespørgsler
meta_query
Hovedargumentet, du bruger til komplekse forespørgsler, er meta_query
. Dette argument alene gør ikke noget. Det fortæller bare WordPress, at du vil lave en forespørgsel til brugerdefinerede metafelter. Du tilføjer yderligere argumenter inden for meta_query
, som bruges til at definere forespørgslen.
nøgle, værdi og sammenlign
Den argumenter key
, value
arbejde nøjagtig samme måde som meta-key
, meta-value
som beskrevet ovenfor. Komplekset compare
ligner det enkle compare
ovenfor, men det kræver en anden liste over komparatorer. Komplekset compare
bruger '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'MELLEM ',' IKKE MELLEM ',' EXISTER 'eller' NOT EXISTS '. value
kan være en matrix, men kun når sammenligning bruger 'IN', 'NOT IN', 'MELLEM' eller 'IKKE MELLEM'.
Hvis du bruger 'EXISTS' eller 'NOT EXISTS' med compare
, behøver du ikke angive et value
argument.
Her er et eksempel, der spørger indlæg, hvis det har "felt1" med værdien "data1" og "felt2" med den værdi, der ikke er "data2".
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
forhold
Den relation
bruges, når du vil forespørge tilpassede metadata ved hjælp af et logisk forhold. Du kan bruge AND
eller OR
. For eksempel bruger du AND
til at sammenligne, om data1 og data2 opfylder kriterierne, og du bruger, OR
hvis data1 eller data2 opfylder kriterierne.
Dette argument er enkeltstående. Det betyder, at det ikke vises i et individuelt tilpasset metafeltparameter. Lad os se på et eksempel. Dette eksempel spørger kun indlæg, der har "felt1" med værdien "data1" og "felt2" med værdien "data2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Hvis du skiftede relation
til “ELLER”. Derefter vil det spørge om alle indlæg, hvis "felt1" har værdien "data1", eller hvis "felt2" har værdien "data2".
type
Det type
argument giver dig mulighed for at vælge den type data til forespørgslen. Du kan bruge 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME' eller 'UNSIGNED'.
“DATE” -typen kan kun bruges med compare
“MELLEM”, hvis datoformatet er “ÅÅÅÅMMDD”.
Dette eksempel spørger ethvert indlæg, hvor værdien af "felt1" er numerisk.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Virkelig verdenseksempel
Indtil videre har jeg kun givet eksempler med vilkårlige data og felter. Nu vil jeg gerne vise dig et virkeligt verdenseksempel på forespørgsel om tilpassede metafelter.
Scenariet
Du har oprettet en brugerdefineret posttype. Begivenhedens posttype har et tilpasset datofelt med id'et på event_date
. Du vil oprette en forespørgsel, der viser alle begivenheder, der starter på den aktuelle dato de næste 30 dage.
Vi skal bruge meta_query
argumentet, som vi vil bruge type
argumentet til at definere feltet "event_date" som "DATE" datatype.
Dette er forespørgslen:
$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 );
Det value
er en matrix med den aktuelle dato - 1 dag og 31 dage fra den aktuelle dato. Da vi bruger komparatoren “MELLEM”, bliver kun stillingerne mellem værdi-arrayet spurgt, så vi vil udligne dem med en dag.
Med denne forespørgsel viser du enhver begivenhed, der finder sted i de næste 30 dage.
Konklusion
Den WP_Query
klasse er en meget fleksibel klasse, der vil tillade dig at oprette et væld af brugerdefinerede forespørgsler. Hvis du vil lære mere om de forskellige argumenter, du kan bruge til forespørgsler, anbefaler jeg at kigge igennem WP_Query
codex-siden.