In deze serie op WP_Query
, je hebt geleerd hoe je de WP_Query
klasse om aangepaste query's in uw themabestanden of plug-ins te maken.
Dit deel van de serie neemt u mee door de argumenten die u kunt gebruiken om zowel eenvoudige als complexe datumzoekopdrachten te maken, om berichten te publiceren die zijn gepubliceerd op, vóór, na of tussen opgegeven datums..
Ik zal u laten zien welke parameters voor u beschikbaar zijn en hoe u ze kunt gebruiken om uw vragen te schrijven. Maar eerst een herinnering aan hoe argumenten werken WP_Query
.
Laten we, voordat we beginnen, een korte samenvatting geven van de manier waarop argumenten werken WP_Query
. Wanneer je codeert WP_Query
in uw thema's of plug-ins moet u vier hoofdelementen opnemen:
In de praktijk zal dit er ongeveer zo uitzien:
have_posts ()) // Start het doorlopen van de queryresultaten. while ($ query-> have_posts ()) $ query-> the_post (); // Inhoud van de opgevraagde resultaten van de post ga hier naartoe. // Oorspronkelijke berichtgegevens herstellen. wp_reset_postdata (); ?>
De argumenten zijn wat WordPress vertelt welke gegevens moeten worden opgehaald uit de database en dat zijn de argumenten die ik hier zal behandelen. Dus het enige waar we ons op concentreren is het eerste deel van de code:
$ args = array (// Argumenten voor uw zoekopdracht.);
Zoals u kunt zien, zijn de argumenten in een array opgenomen. Tijdens deze tutorial leer je hoe je ze kunt coderen.
Codering van uw argumenten
Er is een specifieke manier om de argumenten in de array te coderen, die als volgt is:
$ args = array ('parameter1' => 'waarde', 'parameter2' => 'waarde', 'parameter3' => 'waarde');
U moet de parameters en hun waarden tussen enkele aanhalingstekens plaatsen, gebruik =>
tussen hen, en scheid ze met een komma. Als u dit fout doet, voegt WordPress mogelijk niet al uw argumenten aan de query toe of krijgt u mogelijk een wit scherm.
U kunt ook parameters gebruiken om te zoeken naar berichten met een publicatiedatum op een bepaalde datum. Je kunt zo specifiek zijn als je wilt met datums, met bijvoorbeeld jaren en maanden om een aantal berichten op te halen.
U kunt een eenvoudige reeks argumenten schrijven of gebruiken date_query
om geneste arrays te maken en meer complexe query's uit te voeren. Laten we beginnen met de eenvoudigere argumenten.
De parameters die u kunt gebruiken om te zoeken op datum zijn:
jaar
(int): Viercijferig jaar (bijv. 2015
).monthnum
(int): Maandnummer (uit 1
naar 12
).w
(int): Week van het jaar (vanaf 0
naar 53
). De modus is afhankelijk van de "Start_of_week"
optie die u kunt bewerken op uw pagina Instellingen in de admin.dag
(int): Dag van de maand (van 1
naar 31
).uur
(int): Uur (uit 0
naar 23
).minuut
(int): Minuut (uit 0
naar 60
).tweede
(int): Tweede (0
naar 60
).m
(int): JaarMaand (bijv. 201502
).Stel u dus voor dat u een evenementenwebsite beheert die de publicatiedatum voor elke gebeurtenis gebruikt om de startdatum van de gebeurtenis aan te duiden. Als u alle gebeurtenissen, het verleden en de toekomst wilt weergeven in 2015, zijn hier de argumenten die u nodig hebt:
$ args = array ('post_type' => 'event', 'post_status' => array ('toekomst', 'publiceren'), 'jaar' => '2015');
Merk op dat ik heb gebruikt toekomst
en publiceren
voor de berichtstatus, omdat berichten die zijn gepland voor een datum in de toekomst, standaard niet worden opgevraagd.
Of als u automatisch gebeurtenissen die dit jaar plaatsvinden wilt weergeven en uw zoekopdracht niet elk jaar wilt bijwerken, kunt u eerst het huidige jaar krijgen en dat vervolgens doorgeven in uw queryargumenten:
$ current_year = the_date ('Y'); $ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'year' => $ current_year);
Als u meerdere datumparameters wilt gebruiken om complexere query's te maken, gebruikt u de date_query
parameter. Dit geeft u toegang tot meer parameters:
jaar
(int): Viercijferig jaar (bijv. 2015
).maand
(int): Maandnummer (uit 1
naar 12
).week
(int): Week van het jaar (vanaf 0
naar 53
).dag
(int): Dag van de maand (van 1
naar 31
).uur
(int): Uur (uit 0
naar 23
).minuut
(int): Minuut (uit 0
naar 59
).tweede
(int): Tweede (0
naar 59
).na
(string / matrix): Datum om berichten na te halen. voor
(string / matrix): Datum om berichten vóór te halen. inclusief
(boolean): Voor na / vóór, of de exacte waarde moet worden geëvenaard of niet.vergelijken
(draad): Een operator die u gebruikt om gegevens in de database te vergelijken met uw argumenten. Mogelijke waarden zijn '='
, '! ='
, '>'
, '> ='
, '<'
, '<='
, 'NET ZOALS'
, 'NIET ZOALS'
, 'IN'
, 'NIET IN'
, 'TUSSEN'
, 'NIET TUSSEN'
, 'Bestaat'
, en 'BESTAAT NIET'
.kolom
(draad): Databasekolom om tegen te zoeken: de standaard is 'post-datum'
.relatie
(draad): OF
of EN
, hoe de subarrays moeten worden vergeleken. De standaard is EN
.De date_query
parameter is op deze manier opgemaakt:
$ args = array ('date_query' => array (array (// Arguments go here.)));
U kunt ook meerdere arrays maken en definiëren hoe ze worden vergeleken met behulp van de relatieparameter. In het onderstaande voorbeeld worden query's geretourneerd die overeenkomen met de argumenten in beide arrays:
$ args = array ('date_query' => array ('relation' => 'AND', array (// Arguments go here.), array (// Arguments go here.)));
Terwijl de onderstaande code berichten zal ophalen die overeenkomen met de argumenten in beide rijen (of beide):
$ args = array ('date_query' => array ('relation' => 'OR', array (// Arguments go here.), array (// Arguments go here.)));
Laten we dit illustreren met een voorbeeld. Stel dat u aan een universiteitswebsite werkt en berichten van dit academische jaar wilt weergeven. Het academisch jaar loopt van 1 september 2014 tot 31 augustus 2015, dus je moet berichten vinden in de relevante maanden en jaren:
$ args = array ('date_query' => array ('relation' => 'OR', array ('year' => '2014', 'month' => ('9, 10, 11, 12')), array ('jaar' => '2015', 'maand' => ('1, 2, 3, 4, 5, 6, 7, 8'))));
Merk op dat de maand
parameter neemt een string voor zijn argumenten, niet een array.
Een alternatief voor het bovenstaande voorbeeld is om de datums vóór en / of na te geven waarop u berichten wilt weergeven, met behulp van de voor
en na
parameters. Deze nemen drie argumenten:
jaar
(draad): Accepteert elk jaar van vier cijfers: standaard leeg.maand
(draad): De maand van het jaar (1
naar 12
). De standaard is 12
.dag
(draad): De dag van de maand (1
naar 31
). De standaardwaarde is de laatste dag van de maand.U kunt ook een tekenreeks gebruiken voor de datum, zolang deze compatibel is met de php strtotime
formaat.
Om terug te keren naar mijn voorbeeld van het weergeven van berichten voor dit academische jaar, heb ik nog twee opties. Ten eerste zou ik een genest array kunnen gebruiken met de jaar- en maandparameters:
$ args = array ('date_query' => array ('relation' => 'AND', array ('after' => array ('year' => '2014', 'month' => '9'), ' inclusief '=> true), array (' before '=> array (' year '=>' 2015 ',' month '=>' 8 '),' inclusive '=> true)));
Er zijn een paar dingen om op te merken:
'relatie' => 'EN'
omdat de berichten moeten zijn gepubliceerd na mijn startdatum en voor mijn einddatum.'inclusief' => waar
om ervoor te zorgen dat WordPress geposte berichten haalt in september 2014 en augustus 2015.Ik zou deze query ook kunnen schrijven met een tekenreeks voor de datums:
$ args = array ('date_query' => array (array ('after' => '31 augustus 2014', 'before' => '1 september 2015', 'inclusief' => false,)));
Houd er rekening mee dat vanwege de manier waarop datumreeksen werken, het betrouwbaarder is om exclusieve datums te gebruiken. Dit komt omdat als u een datastring gebruikt, deze op die datum naar 00:00 zal worden geconverteerd. Dus om het te laten werken, gebruik de tijd in je string ook of doe wat ik heb gedaan en gebruik de dag voor de datum waarop je berichten wilt weergeven van (en na de datum waarop je berichten wilt weergeven tot).
Iets anders dat u kunt doen met datumparameters is weergavepublicaties die vandaag zijn gepubliceerd. Terugkomend op mijn evenementensite, laten we zeggen dat ik een grote banner op mijn startpagina wil weergeven op de dag dat een evenement plaatsvindt. Ik kan hier een query voor schrijven en vervolgens de details van de gebeurtenis weergeven als er een wordt gevonden. Dit zijn de argumenten:
$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'date_query' => array (array ('jaar' => datum ('Y') , 'maand' => datum ('M'), 'dag' => datum ('D'))));
De ... gebruiken datum()
functie retourneert de huidige datum-ik heb dit drie keer gebruikt om ervoor te zorgen dat ik de juiste dag, maand en jaar krijg. Merk op dat ik ook het post_status
argument om ervoor te zorgen dat een gebeurtenis die later vandaag plaatsvindt, wordt opgenomen.
Soms wil je niet alleen alle gepubliceerde berichten opvragen. Door de WP_Query
klasse kunt u veel specifiekere query's maken om berichten op datum uit te voeren, inclusief de berichten die u op een bepaalde datum hebt gepubliceerd, vóór een datum, na een datum of tussen een paar datums.
De date_query
argumenten combineren met andere parameters zoals post_status
, wat elders in deze serie meer in detail wordt behandeld.