Om du utformar eller utvecklar WordPress-teman eller plugins finns det en god chans att du någon gång måste göra en fråga för anpassade metafält. Det här är de helt anpassade nyckel- / värdepar som du kan bifoga till valfritt inlägg, sida eller anpassad inläggstyp. WordPress har ett grundläggande användargränssnitt för dem som standard, eller så kan du använda något som Advanced Custom Fields för att bli snäll med dem. Men under huven använder ACF vanliga ol-anpassade fält.
Den här mycket utdragssidan du tittar på just nu skrevs 1999. Vid den tiden måste du använda den globala variabeln `$ wpdb` för att kunna fråga efter inlägg med specifika anpassade fält. Det kan användas för att skapa MySQL-frågor som WordPress WP_Query () -klassen inte stöder. Lyckligtvis idag har WordPress argument som stöder frågor för anpassade metafält.
Här kommer vi att täcka de olika sätten du kan begära och loopa inlägg med specifika anpassade fält (och deras värden). Du kommer att kunna använda denna information oavsett om du använder WP_Query
klassen query_posts()
, eller get_posts()
. Sedan query_posts()
och get_posts()
är omslag för WP_Query
klassen. De accepterar alla samma argument.
Frågan argument
Här är ett grundläggande exempel på en WordPress-fråga från 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
är den viktiga biten där. Vi kommer att skicka olika argument för att få det att fungera som vi vill.
När du frågar efter anpassade meta finns det två ”grupper” av argument som du kan använda. En grupp är för en enkel anpassad metafältfråga och den andra gruppen för mer komplexa anpassade metafältfrågor. Låt oss börja med den enkla gruppen.
meta_key
Det meta_key
argumentet kommer att fråga någon post som har anpassat fält meta ID sparas i databasen, oavsett om det finns ett värde sparas för fältet. Det meta_key
är det ID som du ger till dina metafält. Så här:


Detta exempel kommer att fråga alla inlägg som har det anpassade metafältet med ID: t "field1".
$args = array( 'meta_key' => 'field1' );
metavärde
Det meta_value
argument frågar inlägg som har det värde som du definierar. Det meta_value
argumentet används för strängvärden. Detta exempel kommer att fråga alla inlägg med ett anpassat metafält som har värdet "data1".
$args = array( 'meta_value' => 'data1' );
Du kan också kombinera de två. Det här exemplet kommer bara att fråga efter inlägg som har det anpassade metafältet med ID: t "field1" som har värdet "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Argumentet meta_value_num liknar argumentet `meta_value`. Om meta_value
argumentet är ment för strängvärden meta_value_num
är det avsett för numeriska värden.
Det här exemplet visar hur man frågar efter "field1" anpassat metafält om det har värdet "10".
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
Det meta_compare
argument gör precis vad det låter som. Det gör att du kan använda komparatorer med argumenten 'meta_value' och 'meta_value_num'. Jämförelserna du kan använda är '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'MELLAN', 'INTE MELLAN', 'INTE EXISTERER', 'REGEXP', 'INTE REGEXP' eller 'RLIKE'. Här är ett exempel som visar hur du frågar inlägg som inte har värdet "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Mer komplexa frågor
meta_query
Huvudargumentet du kommer att använda för komplexa frågor är meta_query
. Detta argument på egen hand gör ingenting. Det säger bara till WordPress att du vill göra en fråga för anpassade metafält. Du lägger till ytterligare argument inom meta_query
som kommer att användas för att definiera frågan.
nyckel, värde och jämför
Det argument key
, value
arbete precis på samma sätt som meta-key
, meta-value
enligt beskrivningen ovan. Komplexet compare
liknar det enkla compare
ovan, men det krävs en annan lista över jämförare. Komplexet compare
använder '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'MELLAN ',' INTE MELLAN ',' EXISTER 'eller' INTE EXISTER '. value
kan vara en matris, men bara när jämförelse använder 'IN', 'NOT IN', 'MELLAN' eller 'INTE MELLAN'.
Om du använder 'EXISTS' eller 'NOT EXISTS' med compare
behöver du inte ange ett value
argument.
Här är ett exempel som frågar inlägg om det har "field1" med värdet "data1" och "field2" med det värde som inte är "data2".
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
relation
Den relation
används när du vill fråga anpassade metadata med hjälp av en logisk relation. Du kan använda AND
eller OR
. Du använder AND
till exempel för att jämföra om data1 och data2 uppfyller kriterierna och du använder OR
om data1 eller data2 uppfyller kriterierna.
Detta argument är fristående. Det betyder att det inte visas i enskilda anpassade metafältparametrar. Låt oss titta på ett exempel. Det här exemplet kommer bara att fråga inlägg som har "field1" med värdet "data1" och "field2" med värdet "data2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Om du ändrade relation
till “ELLER”. Då skulle det fråga alla inlägg om “field1” har värdet “data1”, eller om “field2” har värdet “data2”.
typ
Det type
argumentet kan du välja vilken typ av data till fråga. Du kan använda 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME' eller 'UNSIGNED'.
“DATE” -typen kan endast användas med compare
“MELLAN” om datumformatet är “ÅÅÅÅMMDD”.
Detta exempel kommer att fråga alla inlägg där värdet för "field1" är numeriskt.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Verklig världsexempel
Hittills har jag bara gett exempel med godtyckliga data och fält. Nu vill jag visa dig ett verkligt exempel på hur du frågar efter anpassade metafält.
Scenariot
Du har skapat en anpassad posttyp för händelser. Händelsens inläggstyp har ett anpassat datumfält med ID: t event_date
. Du vill skapa en fråga som visar alla händelser som börjar på det aktuella datumet under de kommande 30 dagarna.
Vi kommer att använda meta_query
argumentet som vi vill använda type
argumentet för att definiera fältet ”event_date” som ”DATE” -datatyp.
Det här är frågan:
$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
är en matris med det aktuella datumet - 1 dag och 31 dagar från det aktuella datumet. Eftersom vi använder komparatorn "MELLAN" kommer endast inläggen mellan värden att fråga, så vi vill kompensera dem med en dag.
Med den här frågan visar du alla händelser som inträffar under de närmaste 30 dagarna.
Slutsats
Den WP_Query
klassen är en mycket flexibel klass som gör att du kan skapa en mängd egna frågor. Om du vill lära dig mer om de olika argumenten du kan använda för frågor rekommenderar jag att du tittar igenom WP_Query
codex-sidan.