In de eerdere delen van deze serie, heb je geleerd hoe WP_Query
is gestructureerd en wat zijn eigenschappen en methoden zijn. De volgende fase is om de verschillende argumenten die u ermee kunt gebruiken te begrijpen en hoe u dit het beste kunt doen.
WP_Query
heeft een groot aantal mogelijke argumenten, waardoor het extreem flexibel is. Omdat je het kunt gebruiken om alles wat je in je bezit op te vragen wp_posts
tabel, het heeft argumenten voor elke permutatie van de query die u misschien wilt uitvoeren op uw inhoud.
In deze zelfstudie zal ik twee soorten argumenten bekijken voor het volgende:
De argumenten voor deze twee taxonomieën zijn vergelijkbaar, maar er zijn enkele verschillen die u moet weten als u ze effectief gaat gebruiken.
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.
Laten we beginnen met categorieparameters. De opties die je hier hebt zijn als volgt:
kat
(int): gebruik categorie-ID.categorie naam
(draad): gebruik categorie slug (NIET naam).category__and
(rangschikking): gebruik categorie-ID.category__in
(rangschikking): gebruik categorie-ID.category__not_in
(rangschikking): gebruik categorie-ID.Merk op dat u voor geen van deze de naam van uw categorie gebruikt. Zelfs de categorie naam
parameter neemt de naaktslak als zijn waarde, niet de naam ervan. Ik heb de neiging om deze te gebruiken in plaats van de ID, want wanneer ik later terugkom naar mijn code, zijn slakken gemakkelijker te identificeren dan ID's. Als u echter denkt dat uw sitegebruikers de slak voor een of meer categorieën kunnen wijzigen, raad ik aan het ID te gebruiken om problemen te voorkomen.
Laten we een kijkje nemen naar hoe u elk van deze gebruikt.
De kat
parameter is eenvoudig: gebruik gewoon een enkele categorie-ID of een reeks categorie-ID's.
Querying voor één categorie ziet er als volgt uit:
$ args = array ('cat' => '12');
Query's voor meerdere categorieën zien er als volgt uit:
$ args = array ('cat' => '12, 13, 14 ');
Het bovenstaande zal WordPress vertellen om berichten op te halen die in een van de vermelde categorieën staan. Als u berichten in elk van een reeks categorieën wilt vinden, gebruikt u de category_and
parameter, waarvan meer binnenkort.
Je kunt ook de parameter kat gebruiken om berichten te vinden die in de ene categorie maar niet in de andere categorie zijn, door als volgt een minteken vóór de categorie-ID te gebruiken:
$ args = array ('cat' => '12, -13 ');
Het bovenstaande zou berichten in categorie opvragen 12
maar niet in categorie 13
.
De categorie naam
parameter gebruikt de categorie slug, niet de naam (verwarrend, ik weet het!). Je kunt het opnieuw gebruiken met een enkele categorie of met een reeks categorieën om berichten te vinden die in een van de categorieën voorkomen.
Om berichten in een enkele categorie op te vragen, voegt u toe:
$ args = array ('category_name' => 'my-slug');
En om berichten te vinden in een of meer van een aantal categorieën, gebruik dit:
$ args = array ('category_name' => 'my-slug, your-slug, another-slug');
Net als bij de katparameter, vindt dit geen berichten in de kolom allemaal van de categorieën, maar het zal berichten vinden in ieder van de categorieën.
Als u berichten wilt vinden die zich in een hele reeks categorieën bevinden, is dit de parameter die u gebruikt. Het heeft de categorie-ID's nodig voor zijn waarde. Dus om berichten te vinden in alle drie categorieën, zou je gebruiken:
$ args = array ('category__and' => array ('12', '13', '14'));
Merk op dat dit een array niet een string gebruikt, dus je codeert het anders. De parameter heeft twee underscores in de naam: gebruik er maar één en het zal niet werken.
De volgende parameter zoekt naar berichten in een of meer van een reeks categorieën. Het werkt eigenlijk op dezelfde manier als de cat-parameter, en neemt ook de categorie-ID als zijn waarde.
Dus als u wilt zoeken naar berichten in een of meer van een reeks categorieën, gebruikt u:
$ args = array ('category__in' => array ('12', '13', '14'));
Het bovenstaande zou berichten van een of meer van deze categorieën ophalen.
De category__not_in
parameter doet zoals je zou verwachten: hij zoekt naar berichten die niet in een categorie of een reeks categorieën vallen.
Als u berichten van de ene categorie wilt uitsluiten, gebruikt u het volgende:
$ args = array ('category__not_in' => '12');
En om berichten uit een reeks categorieën uit te sluiten:
$ args = array ('category__not_in' => array ('12', '13', '14'));
Hiermee worden berichten uit een van deze categorieën uitgesloten.
Tags hebben iets verschillende parameters uit categorieën: je kunt niet uitzoeken wat ze kunnen zijn op basis van je kennis van categorieparameters, ben ik bang!
De tag-parameters zijn:
label
(draad): gebruik tag slug.Tag ID
(int): gebruik tag-ID.tag__and
(rangschikking): gebruik tag-id's.tag__in
(rangschikking): gebruik tag-id's.tag__not_in
(rangschikking): gebruik tag-id's.tag_slug__and
(rangschikking): gebruik tagslakken.tag_slug__in
(rangschikking): gebruik tagslakken.Laten we naar elk van deze kijken.
De label
parameter neemt de tag slug als waarde en kan worden gebruikt om berichten te vinden met één tag of met een van een reeks tags.
Dus om berichten te vinden met één tag die u gebruikt:
$ args = array ('tag' => 'my-tag');
En om berichten te vinden met tags van een reeks tags:
$ args = array ('tag' => 'my-tag, uw-tag, another-tag');
Merk op dat de bovenstaande zoekopdrachten berichten bevatten met ieder van de tags in de array, niet allemaal.
De Tag ID
parameter werkt op een vergelijkbare manier als de kat
parameter: het duurt de tag-ID en kan worden gebruikt met een enkele tag of meerdere tags.
Om berichten te vinden met een enkele tag, gebruik je dit:
$ args = array ('tag_id' => '21');
Om berichten te vinden met een of meer tags uit een reeks tag-ID's:
$ args = array ('tag_id' => '21, 22, 23 ');
Je kan ook gebruiken Tag ID
om tags uit te sluiten, hetzij bij gebruik voor enkele tags of meerdere tags.
Dus om berichten te zoeken, behalve die met een bepaalde tag, zou u het volgende gebruiken:
$ args = array ('tag_id' => '-21');
Wanneer u berichten wilt vinden met een van de twee tags, maar zonder een andere tag, gebruikt u dit:
$ args = array ('tag_id' => '21, -22, 23 ');
Dus het bovenstaande zal berichten opvragen met een of beide tags 21
of 23
maar geen tag 22
.
Met deze parameter kunt u berichten vinden met een of meer van een reeks tags. Het werkt op dezelfde manier als label
indien gebruikt met een array:
$ args = array ('tag_in' => array ('21', '22', '23'));
Hiermee worden berichten opgevraagd met een of alle weergegeven tags. Als je berichten met alle tags wilt vinden, gebruik je tag__and
, die ik in een ogenblik zal behandelen.
De tag__not_in
Met parameter kunt u berichten opvragen die niet over een bepaalde tag of reeks tags beschikken.
Gebruik het als volgt om één tag uit te sluiten:
$ args = array ('tag__not_in' => array ('21'));
Merk op dat je nog steeds een array moet gebruiken, ook al gebruik je slechts één tag. Gebruik voor meer tags:
$ args = array ('tag__not_in' => array ('21', '22', '23'));
Hiermee worden berichten opgevraagd die geen van de bovenstaande tags bevatten.
Deze twee parameters gedragen zich op precies dezelfde manier als de tag__and
en tag__in
parameters, behalve dat u die tag-slug in uw arrays gebruikt in plaats van de tag-ID.
Dus om bijvoorbeeld berichten te vinden die beide een paar tags hebben, gebruik je tag__slug_in
:
$ args = array ('tag_slug__in' => array ('my-tag', 'your-tag', 'another-tag'));
Dit vindt berichten met een van deze tags. U kunt de tagparameter ook gebruiken met een reeks tagslaks om hetzelfde resultaat te bereiken.
Als u berichten met alle tags wilt opnemen, gebruikt u tag_slug__and
:
$ args = array ('tag_slug__and' => array ('my-tag', 'your-tag', 'another-tag'));
In plaats van het opvragen van berichten met een van de tags, worden hiermee alleen berichten opgevraagd allemaal van de tags.
Als u uw berichten op categorie en / of tag bekijkt, is er een grote kans dat u hier iets mee te maken heeft WP_Query
. Door bovenstaande argumenten te gebruiken en ze waar nodig te combineren, kunt u krachtige argumenten maken om exact de gegevens te extraheren die u uit de database nodig hebt.