Om du har följt denna serie har du förståelse för hur WP_Query
är strukturerad och hur du använder den för att skriva egna frågor. För att kunna definiera vad WP_Query
hämtar från databasen måste du veta vilka argument du kan använda för att fråga data.
WP_Query
har ett stort antal möjliga argument, vilket gör den extremt flexibel. Som du kan använda den för att fråga nästan vad som helst i din wp_posts
tabell, det har argument för varje permutation av fråga du kanske vill köra på ditt innehåll.
I denna handledning ser jag på argumenten för anpassade fält. Men först, en snabb uppsats om hur du kodar argument i WP_Query
.
Innan vi börjar, låt oss få en snabb omgång om hur argument fungerar WP_Query
. När du kodar WP_Query
i dina teman eller plugins måste du inkludera fyra huvudelement:
om
och medan
taggar och återställer postdataI praktiken kommer det att se ut som följande:
have_posts ()) // Starta looping över sökresultatet. medan ($ query-> have_posts ()) $ query-> the_post (); // Innehållet i de efterfrågade postresultaten går här. // Återställ ursprungliga postdata. wp_reset_postdata (); ?>
Argumenten berättar WordPress vilka data som ska hämtas från databasen och det är de som jag kommer att täcka här. Så allt vi fokuserar på här är den första delen av koden:
$ args = array (// Arguments for your query.);
Som du kan se finns argumenten i en array. Du lär dig hur du kodar dem när du arbetar genom den här handledningen.
Det finns ett visst sätt att koda argumenten i arrayen, vilket är enligt följande:
$ args = array ('parameter1' => 'värde', 'parameter2' => 'värde', 'parameter3' => 'värde');
Du måste bifoga parametrarna och deras värden i enskilda citattecken, använd =>
mellan dem och separera dem med ett komma. Om du får fel kan WordPress inte lägga till alla dina argument på frågan eller du kan få en vit skärm.
Anpassade fält, även kända som postmetadata, kan använda en separat klass som heter WP_Meta_Query
. Detta innebär att om du vill köra en fråga bara för postmetadata kan du använda antingen WP_Meta_Query
eller WP_Query
(vilken åtkomst WP_Meta_Query
), medan du vill fråga efter postmetadata och andra objekt som posttyp, använder du WP_Query
.
De WP_Meta_Query
klassen beskrivs i detalj på andra ställen i denna serie så jag kommer inte att gå in på detaljer om det här, men den största skillnaden mellan att använda det och WP_Query
är det WP_Query
kan du skapa några enkla argument utan att använda kapslade arrayer.
De viktigaste parametrarna för användning WP_Query
att söka anpassade fält är följande:
meta_key
(sträng): Anpassad fältnyckel.meta_value
(sträng): Anpassat fältvärde.meta_value_num
(siffra): Anpassat fältvärde.meta_compare
(sträng): Operatör för att testa 'Meta_value'
. Möjliga värden är '='
, '! ='
, '>'
, '> ='
, '<'
, '<='
, 'TYCKA OM'
, 'INTE SOM'
, 'I'
, 'INTE I'
, 'MELLAN'
, "INTE MELLAN"
, "EXISTS"
, 'REGUTTR'
, "INTE REGEXP"
eller 'RLIKE'
. Standardvärdet är '='
.Använd dessa parametrar för en enkel anpassad fältfråga. Så att till exempel skriva ut inlägg som har ett anpassat fält med nyckeln nyckel1
(oberoende av dess värde) använder du detta argument:
$ args = array ('meta_key' => 'key1');
Detta skulle returnera alla inlägg med ett anpassat fält med nyckel1
nyckel, oavsett värde.
Om du ville ange ett värde skulle du lägga till ett extra argument för det:
$ args = array ('meta_key' => 'key1', 'meta_value' => 'value1');
Detta skulle returnera alla inlägg med ett anpassat fält med nyckel1
nyckel och value1
värde för det.
Alternativt kan du hämta alla inlägg med ett anpassat fält med värdet value1
, oavsett nyckeln. Det här kan vara användbart där du har flera anpassade fältnycklar med dubbla värden:
$ args = array ('meta_value' => 'value1');
Såsom du kan se kan du fråga efter just det egna fältets nyckel eller värde-du behöver inte alltid ange båda.
Du kanske har märkt ovan att det finns många potentiella parametrar för meta_compare
argument, och deras användning kan inte alltid vara omedelbart uppenbart. Låt oss ta en titt på de som du kanske använder mest:
=
: Equals. Det här är standardvärdet, så om du inte innehåller en meta_compare
argument, det här är vad WP_Query ska använda.!+
: Är inte lika med.>
: Större än.> =
: Större än eller lika med.<
: Mindre än.<=
: Mindre än eller lika med.TYCKA OM
: Detta kommer att ignorera det värde du använder, och du kan även använda det med jokertecken för att hitta värden som det värde du letar efter.INTE SOM
: Fungerar på liknande sätt som LIKE men frågar motsatsen!I
: Använd det här med en array i argumentet "Value" för att hitta inlägg med en eller flera av värdena i arrayen.MELLAN
: Använd med en uppsättning av två numeriska värden (anges i meta_value
argument) för att hitta inlägg med ett anpassat fältvärde mellan dessa värden (men inte lika med dem).INTE MELLAN
: Frågar inlägg med anpassade fältvärden utanför en grupp av två numeriska värden som anges av meta_value
argument.Låt oss ta en titt på några exempel användning av detta argument.
Först kan du utesluta anpassade fälttangenter eller värden med hjälp av meta_compare
argument. Så att hämta alla inlägg utom de med ett anpassat fält med nyckel1
nyckel, du skulle använda det här:
$ args = array ('meta_key' => 'key1', 'meta_compare' => '! =');
Du kan också använda 'INTE I'
värde för meta_compare
argument, som också kan användas med en sträng av flera värden:
$ args = array ('meta_key' => 'key1, key2', 'meta_compare' => 'INTE IN');
Detta skulle fråga inlägg som inte har egna fält med nyckel1
eller nyckel2
värden. Om du vill vara mer specifik, kanske frågar efter inlägg med ett anpassat fält och inte en annan, använder du en kapslad array, som vi snart kommer att komma till.
Exemplen ovan använder icke-numeriska värden. Du kan använda WP_Query
med anpassade fält som har numeriska värden, inte bara för att hämta inlägg med ett anpassat fält med det värdet, men också för att hämta dem med egna fält med högre eller lägre värden. Du kan använda det här i en butik till exempel om du letar efter föremål över eller under ett visst pris.
Om du vill hitta inlägg med ett anpassat fältvärde över ett visst nummer, använd något så här:
$ args = array ('meta_key' => 'numkey', 'meta_value' => '100', 'meta_compare' => '>');
Detta skulle returnera alla inlägg med ett anpassat fält med numkey
nyckel och ett värde av över 100
. Om du ville fråga om värden på 100 eller över skulle du använda 'meta_compare' => '> ='
.
Du kan också hitta inlägg vars egna fält har värden mellan två nummer du anger med MELLAN
argument och en array:
$ args = array ('meta_key' => 'numkey', 'meta_value' => array ('100', '200'), 'meta_compare' => 'MELLAN');
Detta skulle hitta alla inlägg med ett värde i numkey
anpassat fält mellan 100 och 200.
Om du vill fråga för mer än ett anpassat fält eller använda mer än en operatör kan du använda en nestad array.
Dessa tar följande struktur:
$ args = array ('meta_query' => array ('relation' => ", // Valfritt argument. array (// 'meta_query' -argument går här.));
Hur du strukturerar 'Meta_query'
argument i WP_Query
är exakt samma som hur du gör det med hjälp av WP_Meta_Query
klass, som omfattas av en senare handledning i denna serie, så jag kommer inte att duplicera det här.
Sedan WordPress version 4.1 kan du också använda flera nivåer av nestad array för att skapa allt mer komplexa och exakta sökfrågor. Dessa ser något ut så här:
$ args = array ('meta_query' => array ('relation' => ", // Valfritt argument. array ('relation' =>", array (// Första uppsättning meta_query-argument går här.), array (// Andra uppsättningen meta_query-argument går här.))));
Det här låter dig använda olika relationer på olika nivåer i din fråga, till exempel fråga efter inlägg med ett värde i en anpassad fältnyckel eller med båda två värdena i en annan anpassad fältnyckel. Detta beskrivs mer detaljerat, med exempel, i handledningen på WP_Meta_Query
klass, som ingår i denna serie.
Använda WP_Query
klass för att fråga dina inläggs metadata (eller anpassade fält) ger dig mycket flexibilitet, med flera potentiella argument kombinerat med ett antal operatörer som hjälper dig att fråga din databas på exakt det sätt du vill.
Om du bara vill använda posta metadata-argument i din fråga (och inte kombinera den med andra argument, till exempel för posttyper) kan du också använda WP_Meta_Query
klass, som senare är täckt i denna serie.