WP_Query Arguments Date

I denna serie på WP_Query, du har läst hur du använder WP_Query klass för att skapa egna frågor i dina temafiler eller plugins.

Den här delen av serien tar dig igenom de argument som du kan använda för att skapa både enkla och komplexa datumfrågor, att skriva ut inlägg publicerade före, efter eller mellan givna datum.

Jag visar dig vilka parametrar som är tillgängliga för dig och hur du använder dem för att skriva dina frågor. Men först, en påminnelse om hur argument fungerar 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
  • avslutas: stänger om och under 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 är vad som säger WordPress vilka data som hämtas från databasen och det är de som jag täcker 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.

Datumparametrar

Du kan också använda parametrar för att fråga efter inlägg med ett publiceringsdatum på ett visst datum. Du kan vara så specifik som du vill med datum, med hjälp av år och månader, till exempel för att hämta ett antal inlägg.

Du kan skriva en enkel uppsättning argument eller du kan använda date_query att skapa inbyggda arrays och köra mer komplexa frågor. Låt oss börja med enklare argument.

Enkla datumargument

Parametrarna som du kan använda för att söka efter datum är:

  • år (int): Fyra siffror år (t.ex.. 2015).
  • monthnum (int): Månadsnummer (från 1 till 12).
  • w (int): Årets vecka (från 0 till 53). Läget är beroende av "Start_på_veckan" alternativ som du kan redigera på din inställningssida i admin.
  • dag (int): Månadens dag (från 1 till 31).
  • timme (int): Timme (från 0 till 23).
  • minut (int): Minut (från 0 till 60).
  • andra (int): Andra (0 till 60).
  • m (int): YearMonth (t.ex.. 201.502).

Så tänk dig att du kör en händelsessida som använder publiceringsdatumet för varje händelse för att ange händelsens startdatum. För att visa alla händelser, tidigare och framtida, som händer år 2015, är här de argument du behöver:

$ args = array ('post_type' => 'händelse', 'post_status' => array ('framtid', 'publicera'), 'år' => '2015');

Observera att jag har använt framtida och publicera för poststatusen, eftersom inlägg som planeras för ett framtida datum inte standardfrågas.

Eller om du automatiskt vill visa händelser som händer i år, och inte uppdatera din fråga varje år, kan du först hämta det aktuella året och sedan skicka det i dina frågargrupper:

$ current_year = the_date ('Y'); $ args = array ('post_type' => 'händelse', 'post_status' => array ('future', 'publish'), 'year' => $ current_year);

Komplexa datumargument

Om du vill använda flera datumparametrar för att skapa mer komplexa frågor använder du date_query parameter. Detta ger dig tillgång till fler parametrar:

  • år (int): Fyra siffror år (t.ex.. 2015).
  • månad (int): Månadsnummer (från 1 till 12).
  • vecka (int): Årets vecka (från 0 till 53).
  • dag (int): Månadens dag (från 1 till 31).
  • timme (int): Timme (från 0 till 23).
  • minut (int): Minut (från 0 till 59).
  • andra (int): Andra (0 till 59).
  • efter (sträng / array): Datum för att hämta inlägg efter. 
  • innan (sträng / array): Datum för att hämta inlägg före. 
  • inclusive (boolean): För efter / före, huruvida exakt värde ska matchas eller inte.
  • jämföra (sträng): En operatör som du använder för att jämföra data i databasen till dina argument. Möjliga värden är '=', '! =', '>', '> =', '<', '<=', 'TYCKA OM', 'INTE SOM', 'I', 'INTE I', 'MELLAN', "INTE MELLAN", 'EXISTERAR', och "EXISTS".
  • kolumn (sträng): Databas kolumn för att fråga mot: standard är 'Post_date'.
  • relation (sträng): ELLER eller OCH, hur delraderna borde jämföras. Standard är OCH.

De date_query Parametern är formaterad så här:

$ args = array ('date_query' => array (array (// Arguments går här.)));

Du kan också skapa flera arrayer och definiera hur de ska jämföras med relativparametern. Nedanstående exempel kommer att returnera frågor som matchar argumenten i båda arraysna:

$ args = array ('date_query' => array ('relation' => 'OCH', array (// Arguments går här.), array (// Arguments go here.)));

Medan koden nedan hämtar inlägg som matchar argumenten i endera matrisen (eller båda):

$ args = array ('date_query' => array ('relation' => 'ELLER', array (// Arguments går här.), array (// Arguments go here.)));

Låt oss illustrera detta med ett exempel. Låt oss säga att du arbetar på en högskolans webbplats och vill visa inlägg från det här läsåret. Läraråret går från 1 september 2014 till 31 augusti 2015, så du behöver hitta inlägg under aktuella månader och år:

$ args = array ('date_query' => array ('relation' => 'ELLER', array ('år' => '2014', 'månad' => ('9, 10, 11, 12')) array ('år' => '2015', 'månad' => ('1, 2, 3, 4, 5, 6, 7, 8'))));

Observera att månad Parametern tar en sträng för sina argument, inte en matris.

Parametrarna före och efter

Ett alternativ till exemplet ovan är att definiera datum före och / eller efter vilket du vill visa inlägg med hjälp av innan och efter parametrar. Dessa tar tre argument:

  • år (sträng): Godkänner något fyrsiffrig år: tom som standard.
  • månad (sträng): Månadens år (1 till 12). Standard är 12.
  • dag (sträng): Månadens dag (1 till 31). Standard är den sista dagen i månaden.

Du kan också använda en sträng för datumet, så länge det är kompatibelt med php strtotime formatera.

Så jag återvänder till mitt exempel på att visa inlägg för detta läsår, jag har två alternativ. För det första kan jag använda en kapslad matris med års- och månadsparametrarna:

$ args = array ('date_query' => array ('relation' => 'OCH', array ('efter' => array ('år' => '2014', 'month' => '9') ' inclusive '=> true), array (' före '=> array (' år '=>' 2015 ',' month '=>' 8 '),' inclusive '=> true)));

Det finns ett par saker att notera här:

  • Jag har använt 'relation' => 'OCH' eftersom inläggen måste ha publicerats efter mitt startdatum och före mitt slutdatum.
  • För varje nestad arrays har jag använt 'inclusive' => true för att se till att WordPress hämtar inlägg publicerade under september 2014 och augusti 2015.

Jag kan också skriva denna fråga med en sträng för datumen:

$ args = array ('date_query' => array (array ('efter' => '31 augusti 2014', 'före' => '1 september 2015', 'inclusive' => false)));

Observera att på grund av hur datumsträngarna fungerar, är det mer tillförlitligt att använda exklusiva datum. Detta beror på att om du använder en datumsträng kommer den att konverteras till 00:00 på det datumet. Så för att få det att fungera, använd antingen tiden i din sträng eller gör som jag har gjort och använd dagen innan Datumet du vill visa inlägg från (och efter det datum du vill visa inlägg till).

Något annat du kan göra med datumparametrar är visningsinlägg som publiceras idag. Kommer tillbaka till min händelsessida, låt oss säga att jag vill visa en stor banner på min hemsida den dag då en händelse inträffar. Jag kan skriva en fråga för detta och sedan utdata om händelsen om en hittas. Här är argumenten:

$ args = array ('post_type' => 'händelse', 'post_status' => array ('framtid', 'publicera'), 'date_query' => array (array ('year' => date ('Y') , 'månad' => datum ('M'), 'dag' => datum ('D'))));

Använda datum() funktionen returnerar det aktuella datumet - jag har använt det här tre gånger för att jag ska få rätt dag, månad och år. Observera att jag också har inkluderat post_status argument för att se till att en händelse inträffar senare idag ingår.

Sammanfattning

Ibland vill du inte bara fråga alla publicerade inlägg. Genom att använda WP_Query klass kan du skapa mycket mer specifika frågor för att utgå inlägg efter datum, inklusive de inlägg som du publicerade på ett visst datum, före ett datum, efter ett datum eller mellan ett par datum.

De date_query Argument kombineras med andra parametrar som post_status, som beskrivs mer i detalj på annat håll i denna serie.