WP_Query Argumenter Dato

I denne serien på WP_Query, du har lært å bruke WP_Query klassen for å lage egendefinerte søk i temafiler eller plugins.

Denne delen av serien tar deg gjennom argumentene du kan bruke til å lage både enkle og komplekse datoforespørsler, å skrive ut innlegg publisert på, før, etter eller mellom bestemte datoer.

Jeg vil vise deg hvilke parametere som er tilgjengelige for deg og hvordan du bruker dem til å skrive dine spørsmål. Men først, en påminnelse om hvordan argumenter fungerer WP_Query.

Et sammendrag om hvordan argumenter fungerer i WP_Query

Før vi starter, la oss få en rask omtale på hvordan argumenter fungerer WP_Query. Når du kodes WP_Query i dine temaer eller plugins må du inkludere fire hovedelementer:

  • Argumentene for spørringen, ved hjelp av parametere som vil bli dekket i denne opplæringen
  • selve spørringen
  • løkken
  • Etterbehandling: lukking hvis og mens koder og tilbakestilling av postdata

I praksis vil dette se ut som følgende:

have_posts ()) // Start looping over spørringsresultatene. mens ($ query-> have_posts ()) $ query-> the_post (); // Innholdet i de forespurte postresultatene går her.  // Gjenopprett originale innleggsdata. wp_reset_postdata (); ?>

Argumentene er hva som forteller WordPress hvilke data som skal hentes fra databasen, og det er de som jeg vil dekke her. Så alt vi fokuserer på her er den første delen av koden:

$ args = array (// Argumenter for søket ditt.);

Som du kan se, er argumentene inneholdt i en matrise. Du lærer hvordan du kodes dem mens du arbeider gjennom denne opplæringen.

Koding av dine argumenter

Det er en bestemt måte å kode på argumentene i arrayet, som er som følger:

$ args = array ('parameter1' => 'verdi', 'parameter2' => 'verdi', 'parameter3' => 'verdi');

Du må legge inn parametrene og deres verdier i enkelt anførselstegn, bruk => mellom dem, og skill dem med et komma. Hvis du får feil, kan WordPress ikke legge til alle dine argumenter på spørringen, eller du kan få en hvit skjerm.

Dato Parametre

Du kan også bruke parametere for å søke etter innlegg med en publiseringsdato på en gitt dato. Du kan være så spesifikk som du liker med datoer, og bruker år og måneder for eksempel for å hente flere innlegg.

Du kan skrive et enkelt sett med argumenter eller du kan bruke date_query å lage nestede arrays og kjøre mer komplekse søk. La oss starte med enklere argumenter.

Enkle datoargumenter

Parametrene du kan bruke til å søke etter dato er:

  • år (int): Firesifret år (f.eks. 2015).
  • monthnum (int): Måned nummer (fra 1 til 12).
  • w (int): Årets uke (fra 0 til 53). Modus er avhengig av "Start_of_week" alternativ som du kan redigere på Innstillinger-siden i administrasjonen.
  • dag (int): Dag i måneden (fra 1 til 31).
  • time (int): Time (fra 0 til 23).
  • minutt (int): Minute (fra 0 til 60).
  • sekund (int): Sekund (0 til 60).
  • m (int): YearMonth (f.eks. 201502).

Så tenk at du kjører et arrangementsside som bruker publiseringsdatoen for hver hendelse for å angi startdato for hendelsen. For å vise alle hendelser, fortid og fremtid, som skjer i 2015, er det de argumentene du trenger:

$ args = array ('post_type' => 'event', 'post_status' => array ('fremtid', 'publiser'), 'år' => '2015');

Legg merke til at jeg har brukt framtid og publisere for innleggsstatusen, da innlegg som er planlagt for en fremtidig dato, ikke blir forespurt som standard.

Eller hvis du ønsker å automatisk vise hendelser som skjer i år, og ikke oppdaterer spørringen hvert år, kan du først få det nåværende året og deretter sende det i spørringsargumentene dine:

$ current_year = the_date ('Y'); $ args = array ('post_type' => 'event', 'post_status' => array ('fremtid', 'publiser'), 'år' => $ current_year);

Komplekse Dato Argumenter

Hvis du vil bruke flere dataparametere for å lage mer komplekse søk, bruker du date_query parameter. Dette gir deg tilgang til flere parametere:

  • år (int): Firesifret år (f.eks. 2015).
  • måned (int): Måned nummer (fra 1 til 12).
  • uke (int): Årets uke (fra 0 til 53).
  • dag (int): Dag i måneden (fra 1 til 31).
  • time (int): Time (fra 0 til 23).
  • minutt (int): Minute (fra 0 til 59).
  • sekund (int): Sekund (0 til 59).
  • etter (snor / matrise): Dato for å hente innlegg etter. 
  • før (snor / matrise): Dato for å hente innlegg før. 
  • inklusive (boolean): For etter / før, om eksakt verdi skal matches eller ikke.
  • sammenligne (string): En operatør du bruker til å sammenligne data i databasen til dine argumenter. Mulige verdier er '=', '! =', '>', '> =', '<', '<=', 'SOM', 'IKKE LIKE', 'I', 'IKKE I', 'MELLOM', "IKKE MELLOM", 'Finnes', og "IKKE EXISTERER".
  • kolonne (string): Database kolonne for å spørre mot: standard er 'post dato'.
  • relasjon (string): ELLER eller OG, hvordan delarrayene skal sammenlignes. Standard er OG.

De date_query parameteren er formatert slik:

$ args = array ('date_query' => array (array (// Argumenter gå her.)));

Du kan også opprette flere arrayer og definere hvordan de skal sammenlignes ved hjelp av relasjonsparameteren. Nedenfor vises eksempler som svarer til argumentene i begge arrays:

$ args = array ('date_query' => array ('relation' => 'OG', array (// Argumenter gå her.), array (// Arguments gå her.)));

Mens koden nedenfor vil hente innlegg som stemmer overens med argumentene i begge grupper (eller begge):

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

La oss illustrere dette med et eksempel. La oss si at du jobber på en høyskole nettside og ønsker å vise innlegg fra dette akademiske året. Det akademiske året går fra 1. september 2014 til 31. august 2015, så du må finne innlegg i de aktuelle månedene og årene:

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

Legg merke til at måned parameteren tar en streng for sine argumenter, ikke en matrise.

Før og etter Parametrene

Et alternativ til eksempelet ovenfor er å definere datoene før og / eller hvor du vil vise innlegg, ved hjelp av før og etter parametre. Disse tar tre argumenter:

  • år (string): Godtar et firsifret år: tom som standard.
  • måned (string): Måned på året (1 til 12). Standard er 12.
  • dag (string): Månedens dag (1 til 31). Standardinnstillingen er den siste dagen i måneden.

Du kan også bruke en streng for datoen, så lenge den er kompatibel med php strtotime format.

Så jeg går tilbake til mitt eksempel på å vise innlegg for dette akademiske året, jeg har to alternativer. For det første kunne jeg bruke en nestet matrise med år og måned parametere:

$ args = array ('date_query' => array ('relation' => 'OG', array ('after' => array ('år' => '2014', 'måned' => '9') ' inclusive '=> true), array (' before '=> array (' år '=>' 2015 ',' måned '=>' 8 '),' inkluderende '=> sann)));

Det er et par ting å merke seg her:

  • Jeg har brukt 'relasjon' => 'OG' fordi innleggene må ha blitt publisert etter startdato og før sluttdato.
  • For hver av de nestede arrays, har jeg brukt 'inclusive' => sant for å sikre at WordPress henter innlegg publisert i september 2014 og august 2015.

Jeg kunne også skrive denne søken ved hjelp av en streng for datoene:

$ args = array ('date_query' => array (array ('etter' => '31. august 2014', 'før' => '1 september 2015', 'inkluderende' => falskt,)));

Merk at på grunn av måten datastrenger fungerer, er det mer pålitelig å bruke eksklusive datoer. Dette skyldes at hvis du bruker en datastring, konverteres dette til 00:00 på den datoen. Så for å få det til å fungere, bruk også tiden i strengen din, eller gjør som jeg har gjort og bruk dagen før datoen du vil vise innlegg fra (og etter datoen du vil vise innlegg til).

Noe annet du kan gjøre med dataparametere, er displayposter publisert i dag. Når jeg går tilbake til nettstedet for hendelser, la oss si at jeg vil vise et stort banner på hjemmesiden min den dagen da det skjer en hendelse. Jeg kan skrive en spørring for dette og deretter utdata om arrangementet hvis man finner en. Her er argumentene:

$ args = array ('post_type' => 'event', 'post_status' => array ('fremtid', 'publiser'), 'date_query' => array ('år' => dato ('Y') , 'måned' => dato ('M'), 'dag' => dato ('D'))));

Bruker Dato() funksjonen returnerer gjeldende dato-jeg har brukt dette tre ganger for å sikre at jeg får den riktige dagen, måneden og året. Legg merke til at jeg også har tatt med post_status argument for å sikre at en hendelse skjer senere i dag er inkludert.

Sammendrag

Noen ganger vil du ikke bare spørre alle publiserte innlegg. Ved å bruke WP_Query klassen kan du lage mye mer spesifikke spørringer for å sende innlegg etter dato, inkludert innleggene du publiserte på en bestemt dato, før en dato, etter en dato eller mellom et par datoer.

De date_query argumenter kombinere med andre parametere som post_status, som er dekket mer detaljert andre steder i denne serien.