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
.
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:
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.
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.
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);
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.
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:
'relasjon' => 'OG'
fordi innleggene må ha blitt publisert etter startdato og før sluttdato.'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.
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.