In dit deel van de serie over Mastering WP_Query
, u zult enkele van de argumenten leren kennen die u met de kunt gebruiken WP_Query
klasse, namelijk die voor:
U kunt deze argumenten gebruiken om geplande berichten uit de database op te halen, bijlagen op te vragen, de manier waarop berichten worden geordend en waarvoor ze zijn geordend aan te passen, om te specificeren hoeveel berichten worden weergegeven en nog veel meer
Maar voordat je dit kunt doen, moet je begrijpen 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.
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.
Zoals je zult weten als je de status van een bericht ooit hebt geconverteerd van Concept naar Gepubliceerd of misschien in de prullenbak hebt geplaatst, wijst WordPress een status toe aan elk bericht. U kunt de post_status
parameter om te zoeken naar berichten met een of meer statussen.
De beschikbare argumenten zijn:
publiceren
: Een gepubliceerd bericht of pagina.in afwachting
: Bericht wacht op beoordeling.droogte
: Een bericht in de conceptstatus.auto-ontwerp
: Een nieuw bericht zonder inhoud.toekomst
: Een bericht om in de toekomst te publiceren.privaat
: Niet zichtbaar voor gebruikers die niet zijn aangemeld.erven
: Een herziening.uitschot
: Bericht staat in prullenbak.ieder
: Haalt elke status op, behalve die van poststatussen met 'Exclude_from_search'
ingesteld op true (d.w.z.. uitschot
en auto-ontwerp
).Als u geen status opgeeft in uw queryargumenten, wordt WordPress standaard ingesteld op publiceren
; als de huidige gebruiker is aangemeld, bevat deze ook berichten met de status privaat
. Als u een query uitvoert op de beheerpagina's, bevat WordPress ook de beschermde statussen toekomst
, droogte
en in afwachting
standaard.
Stel dat u een evenementenwebsite uitvoert en dat u een aangepast berichttype gebruikt, waarbij de publicatiedatum wordt gebruikt als de datum waarop het evenement plaatsvindt. WordPress geeft standaard geen gebeurtenissen weer die nog niet zijn gebeurd: hoewel je ze hebt gepland, is hun geplande datum in de toekomst dus hun berichtstatus is toekomstig.
Om dit te omzeilen gebruikt u eenvoudig deze argumenten:
$ args = array ('post_type' => 'event', 'post_status' => 'toekomst');
Hiermee worden alleen die gebeurtenissen weergegeven die nog niet zijn gebeurd, omdat deze de publiceren
-status. Maar als u ook gebeurtenissen wilt weergeven die zijn gebeurd, kunt u een reeks poststatussen gebruiken om er meer dan één te maken:
$ args = array ('post_type' => 'event', 'post_status' => array ('toekomst', 'publiceren'));
De post_status
parameter is essentieel wanneer u naar bijlagen vraagt. Dit komt omdat ze de status hebben van erven
, niet publiceren
. Dus om op alle bijlagen te zoeken, zou je dit gebruiken:
$ args = array ('post_type' => 'bijlage', 'post_status' => 'overnemen');
Als alternatief zou je kunnen vervangen erven
met ieder
wat hetzelfde effect zou hebben.
Er zijn twee parameters die u gebruikt om berichten te bestellen die zijn opgehaald door WP_Query
: bestellen
en orderby
. Zoals je zou verwachten, bestellen
definieert de volgorde waarin berichten in de lus worden uitgevoerd, en orderby
definieert welk veld in de database ze worden gesorteerd.
Laten we beginnen door naar de argumenten voor te kijken bestellen
.
Er zijn slechts twee argumenten die u hiervoor kunt gebruiken:
ASC
: oplopende volgorde van laagste tot hoogste waarden (1, 2, 3; a, b, c).DESC
: aflopende volgorde van hoogste naar laagste waarden (3, 2, 1; c, b, a).Deze zijn redelijk vanzelfsprekend. Als u geen argument opneemt voor bestellen
, WordPress zal standaard naar DESC
.
U kunt uw berichten sorteren op een reeks velden:
geen
: Geen bestelling (beschikbaar met versie 2.8).ID kaart
: Bestel per post-ID. Let op het hoofdlettergebruik.schrijver
: Bestelling door auteur.titel
: Bestel op titel.naam
: Bestel per postslak.type
: Bestel per posttype.datum
: Volgorde op datum.gemodificeerde
: Sorteer op laatste wijzigingsdatum.ouder
: Order per post / pagina bovenliggende id.rand
: Willekeurige volgorde.COMMENT_COUNT
: Volgorde op aantal opmerkingen.menu_order
: Volgorde op paginavolgorde. Meestal gebruikt voor Pages (met behulp van de waarde die u aan de metabox toevoegt in het scherm Pagina bewerken) en voor bijlagen (met behulp van de velden voor geheel getal in het dialoogvenster Media-album invoegen / uploaden), maar die kan worden gebruikt voor elk berichttype met menu_order
ingeschakeld.meta_value
: Sorteer op de waarde voor een metatoets (of aangepast veld). Dit werkt alleen als u ook een meta_key
parameter in uw argumenten. Metawaarden worden alfabetisch en niet numeriek gesorteerd (dus 34 komen bijvoorbeeld vóór 4). meta_value_num
: Order op numerieke metawaarde. Zoals met meta_value
, je moet ook een meta_key
argument in uw vraag.posten in
: Bewaar de post ID-volgorde in de posten in
rangschikking.De standaard is datum
, dat wil zeggen de datum waarop een bericht is gepubliceerd.
Dus als u bijvoorbeeld uw berichten wilt sorteren op titel in oplopende volgorde, gebruikt u deze argumenten:
$ args = array ('orderby' => 'title', 'order' => 'ASC');
U hoeft niet bij slechts één veld te blijven om uw berichten te sorteren. Als u op meerdere velden wilt sorteren, gebruikt u een array met de orderby
parameter en (optioneel) met de bestellen
parameter als u elk veld in een andere volgorde wilt sorteren.
Stel dat u een veld voor beoordelingen op maat heeft dat u wilt gebruiken om te sorteren op een e-commercesite. U kunt sorteren op rating en vervolgens op titel, beide in oplopende volgorde, op deze manier:
$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => 'ASC', 'meta_key' => 'rating');
Merk op dat ik de meta_key
argument om WordPress te laten weten welk aangepast veld ik gebruik. U doet dit vanwege de manier waarop WordPress-winkels metadata plaatsen: niet in de wp_posts
tafel, maar in de wp_postmeta
tafel.
Maar wat als je wilde bestellen door te beoordelen in aflopende volgorde en vervolgens de titel in oplopende volgorde? U gebruikt gewoon een andere array:
$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => array ('DESC', 'ASC'), 'meta_key' => 'rating');
U kunt ook op meerdere velden sorteren als u geen metagegevens voor berichten gebruikt, bijvoorbeeld om te sorteren op berichttype en vervolgens op datum:
$ args = array ('orderby' => array ('type', 'date'), 'order' => array ('ASC', 'DESC'));
Dit zou sorteren op posttype in oplopende volgorde en vervolgens binnen elk berichttype op datum in aflopende volgorde.
De volgende reeks parameters waar we naar toe gaan, is voor paginering. Hiermee kunt u bepalen hoeveel berichten worden opgevraagd en hoe paginering werkt wanneer ze worden uitgevoerd.
De beschikbare parameters zijn:
nopaging
(boolean): Alle berichten weergeven of paginering gebruiken. De standaard is 'False'
, d.w.z. gebruik paginering.posts_per_page
(int): Aantal berichten dat per pagina wordt weergegeven.posts_per_archive_page
(int): Aantal berichten dat alleen per pagina-op archiefpagina's wordt weergegeven.compenseren
(int): Aantal berichten aan verplaatsen of passeren.wisselbare
(int): De pagina in het archief waaruit berichten worden getoond.pagina
(int): Aantal pagina's voor een statische voorpagina. Toon de berichten die normaal alleen op pagina X van een statische voorpagina worden weergegeven.ignore_sticky_posts
(boolean): Negeer post stickiness-default op vals
.Laten we een paar voorbeelden bekijken.
Om bijvoorbeeld de vijf meest recente berichten weer te geven:
$ args = array ('posts_per_page' => '5');
Of om vijf recente berichten weer te geven, met uitzondering van de meest recente:
$ args = array ('posts_per_page' => '5', 'offset' => '1');
Merk op dat hoewel je berichten van de meest recente zes berichten in de database ophaalt, je nog steeds gebruikt 'posts_per_page' => '5'
omdat dat het aantal berichten is dat wordt uitgevoerd.
Als u dit een beetje verder neemt, kunt u twee query's schrijven: een om de meest recente post weer te geven en een seconde om nog tien berichten weer te geven met uitzondering van die post:
$ args = array ('posts_per_page' => '1'); // Query en loop gaan hier en bepalen ook berichten. $ args = array ('posts_per_page' => '10', 'offset' => '1'); // Tweede query, lus en opnieuw instellen, ga hier naartoe.
Je kan ook gebruiken posts_per_page
weergeven allemaal berichten:
$ args = array ('posts_per_page' => '-1');
Normaal gesproken verschijnen uw zelfklevende berichten als eerste in een zoekopdracht: als u dit wilt overschrijven, gebruikt u ignore_sticky_posts
:
$ args = array ('posts_per_page' => '5', 'ignore_sticky_posts' => true);
De bovenstaande argumenten retourneren de meest recente vijf berichten, ongeacht of ze kleverig zijn of niet.
Merk op dat als u alleen maar plaknotities wilt weergeven, u de get_option ()
functie en de posten in
argument als volgt:
$ sticky = get_option ('sticky_posts'); $ args = array ('posts_per_page' => '5', 'post__in' => $ sticky);
Het bovenstaande zou de laatste vijf plaknotities weergeven: als er minder dan vijf (bijvoorbeeld drie) plakkerige berichten zijn, worden er geen niet-plakkerige berichten weergegeven, maar alleen de meest recente drie plaknotities.
Naast het definiëren van hoeveel berichten worden opgehaald uit de database, kunt u ook paginatieparameters gebruiken om te definiëren hoe de resulterende berichten worden gepagineerd op archief- en zoekpagina's..
Dus bijvoorbeeld op een archiefpagina zou je deze code kunnen gebruiken om 20 berichten per pagina in het archief weer te geven:
$ args = array ('posts_per_archive_page' => '20');
Merk op posts_per_archive_page
argument zal overschrijven posts_per_page
.
U kunt er ook voor kiezen alleen de pagina's uit te voeren die op een bepaalde pagina op pagina's met pagina's zouden verschijnen. Als u bijvoorbeeld de 20 berichten wilt weergeven die op de derde pagina in het bovenstaande voorbeeld zouden verschijnen, zou u dit gebruiken:
$ args = array ('posts_per_archive_page' => '20', 'paged' => '3');
Een alternatieve manier om dezelfde berichten te doorzoeken zou zijn om de compenseren
argument:
$ args = array ('posts_per_page' => '20', 'offset' => '40');
Hiermee worden de eerste 40 berichten overgeslagen (die zich op de eerste twee archiefpagina's bevinden) en worden de volgende 20 berichten opgehaald (die zich op de derde archiefpagina bevinden.) Een van de dingen die ik zo leuk vind aan WordPress, is hoe vaak je meer dan een manier om iets te bereiken!
U kunt de paginering ook helemaal uitschakelen om ervoor te zorgen dat alle berichten op dezelfde pagina worden weergegeven:
$ args = array ('nopaging' => true);
De WP_Query
klas geeft je voldoende flexibiliteit als het gaat om het bepalen van het aantal berichten dat je wilt bevragen, in welke volgorde je ze wilt weergeven en naar welke status je wilt posten.
Sommige van deze argumenten zijn essentieel voor het bevragen van bepaalde soorten berichten (bijvoorbeeld 'post_status' => 'geërfd'
voor bijlagen), terwijl anderen u eenvoudig meer controle geven over de manier waarop uw zoekopdrachten worden uitgevoerd.
Met behulp van deze parameters kunt u aangepaste query's maken die veel meer doen dan alleen de meest recent gepubliceerde berichten uitvoeren.