I de tidigare delarna av denna serie har du lärt dig hur WP_Query
är strukturerad och vad dess egenskaper och metoder är. Nästa steg är att förstå de olika argument som du kan använda med det och hur bäst du gör det.
WP_Query
har ett stort antal möjliga argument, vilket gör den extremt flexibel. Som du kan använda den för att fråga nästan vad som helst i din wp_posts
tabell, det har argument för varje permutation av fråga du kanske vill köra på ditt innehåll.
I denna handledning ser jag på två typer av argument, för följande:
Argumenten för dessa två taxonomier är likartade men har vissa skillnader du behöver veta om du ska använda dem effektivt.
Innan vi börjar, låt oss få en snabb omgång om hur argument fungerar WP_Query
. När du kodar WP_Query
i dina teman eller plugins måste du inkludera fyra huvudelement:
I praktiken kommer det att se ut som följande:
have_posts ()) // Starta looping över sökresultatet. medan ($ query-> have_posts ()) $ query-> the_post (); // Innehållet i de efterfrågade postresultaten går här. // Återställ ursprungliga postdata. wp_reset_postdata (); ?>
Argumenten är vad som säger WordPress vilka data som hämtas från databasen och det är de som jag täcker här. Så allt vi fokuserar på här är den första delen av koden:
$ args = array (// Arguments for your query.);
Som du kan se finns argumenten i en array. Du lär dig hur du kodar dem när du arbetar genom den här handledningen.
Det finns ett visst sätt att koda argumenten i arrayen, vilket är enligt följande:
$ args = array ('parameter1' => 'värde', 'parameter2' => 'värde', 'parameter3' => 'värde');
Du måste bifoga parametrarna och deras värden i enskilda citattecken, använd =>
mellan dem och separera dem med ett komma. Om du får fel kan WordPress inte lägga till alla dina argument på frågan eller du kan få en vit skärm.
Låt oss börja med kategoriparametrar. Alternativen du har här är som följer:
katt
(int): använd kategori id.kategori namn
(sträng): använd kategori slug (NOT name).category__and
(array): använd kategori id.category__in
(array): använd kategori id.category__not_in
(array): använd kategori id.Observera att för ingen av dessa använder du namnet på din kategori. Även kategori namn
parameter tar sluggen som dess värde, inte dess namn. Jag brukar använda den här snarare än ID-numret som när jag kommer tillbaka till min kod vid ett senare tillfälle, är sniglar lättare att identifiera än ID-skivor. Men om du tycker att dina webbplatsanvändare kanske ändrar slug för en eller flera kategorier, rekommenderar jag att du använder ID för att undvika problem.
Låt oss ta en titt på hur du använder var och en av dessa.
De katt
Parametern är enkel: använd bara ett enda kategori-ID eller en sträng kategori-ID.
Fråga efter en kategori ser så här ut:
$ args = array ('cat' => '12');
Fråga efter flera kategorier ser så här ut:
$ args = array ('cat' => '12, 13, 14 ');
Ovanstående kommer att berätta för WordPress att hämta inlägg som finns i någon av de listade kategorierna. Om du vill hitta inlägg i var och en av en rad olika kategorier använder du category_and
parameter, varav mer inom kort.
Du kan även använda kattparametern för att hitta inlägg som är i en kategori men inte en annan, genom att använda ett minustecken före kategorin ID enligt följande:
$ args = array ('cat' => '12, -13 ');
Ovanstående skulle fråga inlägg i kategori 12
men inte i kategorin 13
.
De kategori namn
parameter använder kategorin slug, inte namnet (förvirrande, jag vet!). Återigen kan du använda den med en enda kategori eller med en rad kategorier för att hitta inlägg som finns i någon av kategorierna.
För att fråga inlägg i en enda kategori lägger du till:
$ args = array ('category_name' => 'my-slug');
Och för att hitta inlägg i ett eller flera av ett antal kategorier, använd det här:
$ args = array ('category_name' => 'my-slug, your-slug, another-slug');
Precis som med kattparametern kommer det inte att hitta inlägg som finns i Allt av kategorierna, men det kommer att hitta inlägg i några av kategorierna.
Om du vill hitta inlägg som finns i en mängd olika kategorier, är det här parametern du använder. Det tar kategorin ID för sitt värde. Så att hitta inlägg i alla tre kategorier, skulle du använda:
$ args = array ('category__and' => array ('12', '13', '14'));
Observera att detta använder en array inte en sträng, så du kodar den annorlunda. Parametern har två understreck i sitt namn: använd bara en och det fungerar inte.
Nästa parameter söker efter inlägg i en eller flera av en rad olika kategorier. Det fungerar faktiskt på samma sätt som kattparametern, och tar också kategoridokumentet som sitt värde.
Så att fråga inlägg i en eller flera av en rad kategorier, skulle du använda:
$ args = array ('category__in' => array ('12', '13', '14'));
Ovanstående skulle hämta inlägg från en eller flera av dessa kategorier.
De category__not_in
parametern gör det som du förväntar dig: det frågar inlägg som inte finns i en kategori eller en grupp av kategorier.
Om du vill utesluta inlägg från en kategori använder du följande:
$ args = array ('category__not_in' => '12');
Och för att utesluta inlägg från en rad kategorier:
$ args = array ('category__not_in' => array ('12', '13', '14'));
Detta skulle utesluta inlägg från någon av dessa kategorier.
Taggar har något annorlunda parametrar från kategorier: du kan inte uträtta vad de kan vara baserat på din kunskap om kategoriparametrar, jag är rädd!
Taggparametrarna är:
märka
(sträng): använd taggen slug.tag_id
(int): använd tagg id.tag__and
(array): använd tagg ids.tag__in
(array): använd tagg ids.tag__not_in
(array): använd tagg ids.tag_slug__and
(array): Använd taggen sniglar.tag_slug__in
(array): Använd taggen sniglar.Låt oss titta på var och en av dessa.
De märka
parametern tar taggen slug för sitt värde och kan användas för att hitta inlägg med en tagg eller med någon av en rad taggar.
Så att hitta inlägg med en tagg du använder:
$ args = array ('tag' => 'my-tag');
Och för att hitta inlägg med taggar från en rad taggar:
$ args = array ('tag' => 'my-taggen, din tagg, en annan tagg');
Observera att ovanstående frågor inlägg med några av taggarna i arrayen, inte alla av dem.
De tag_id
Parametern fungerar på samma sätt som katt
parameter: det tar tagg-ID och kan användas med en enda tagg eller flera taggar.
För att hitta inlägg med en enda tagg använder du det här:
$ args = array ('tag_id' => '21');
För att hitta inlägg med en eller flera taggar från en rad tagg-ID:
$ args = array ('tag_id' => '21, 22, 23 ');
Du kan också använda tag_id
att utesluta taggar, antingen när de används för enskilda taggar eller flera taggar.
Så att fråga inlägg utom de med en viss tagg, skulle du använda:
$ args = array ('tag_id' => '-21');
Medan du hittar inlägg med en av två taggar men utan en annan tagg, använder du det här:
$ args = array ('tag_id' => '21, -22, 23 ');
Så ovanstående kommer att fråga inlägg med endera eller båda taggarna 21
eller 23
men inte tagg 22
.
Med denna parameter kan du hitta inlägg med en eller flera av en rad taggar. Det fungerar på samma sätt som märka
när den används med en array:
$ args = array ('tag_in' => array ('21', '22', '23'));
Detta kommer att fråga efter inlägg med någon eller alla angivna taggar. Om du vill hitta inlägg med alla taggar, använder du tag__and
, som jag täcker på ett ögonblick.
De tag__not_in
parameter kan du fråga inlägg som inte har en viss tagg eller en rad taggar.
Använd den så här för att utesluta en tagg:
$ args = array ('tag__not_in' => array ('21'));
Observera att du fortfarande behöver använda en array även om du bara använder en tagg. För fler taggar, använd:
$ args = array ('tag__not_in' => array ('21', '22', '23'));
Detta kommer att fråga efter inlägg som inte har någon av ovanstående taggar.
Dessa två parametrar beter sig på exakt samma sätt som tag__and
och tag__in
parametrar, förutom att du använder taggen slug i dina arrayer istället för tagg-ID.
Så till exempel för att hitta inlägg som har båda ett par taggar, använder du tag__slug_in
:
$ args = array ('tag_slug__in' => array ('my-tag', 'din-tagg', 'annan tagg'));
Detta hittar inlägg med någon av dessa taggar. Du kan också använda taggparametern med en rad taggar som ger samma resultat.
Om du vill inkludera inlägg med alla en uppsättning taggar, använd tag_slug__and
:
$ args = array ('tag_slug__and' => array ('my-tag', 'din-tagg', 'annan tagg'));
I stället för att fråga inlägg med någon av taggarna frågar det bara inlägg som har Allt av taggarna.
Att fråga dina inlägg efter kategori och / eller tagg är något där det finns en bra chans att du får möjlighet att göra med WP_Query
. Genom att använda argumenten ovan och kombinera dem vid behov kan du skapa kraftfulla argument för att extrahera exakt de data du behöver från databasen.