WP_Query-argument Anpassade fält

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.

Ett sammanfattning om hur argument fungerar 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:

  • Argumenten för frågan, med parametrar som kommer att omfattas av denna handledning
  • själva frågan
  • loopen
  • avslutar: stängning om och medan taggar och återställer postdata

I 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.

Kodning av dina argument

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ältparametrar

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.

Parametrar för enkla anpassade fältfrågor

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.

Använda meta_compare Argument

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.

Nested Custom Field Queries

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.

Sammanfattning

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.