WP_Query Argument Kategorier och Taggar

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:

  • kategorier
  • taggar

Argumenten för dessa två taxonomier är likartade men har vissa skillnader du behöver veta om du ska använda dem effektivt.

Ett sammanfattning om hur argument fungerar i WP_Query

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:

  • Argumenten för frågan, med parametrar som kommer att omfattas av denna handledning
  • själva frågan
  • loopen
  • avslutar: återställer postdata

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.

Kodning av dina argument

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.

Kategori Parametrar

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.

Kattparametern

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.

Kategorinamn Parameter

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.

Category__and Parameter

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.

Category__in Parameter

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.

Category__not_in Parameter

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.

Tagparametrar

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.

Taggen Parameter

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.

Tag_id-parametern

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.

Taggenparametern

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.

Taggen inte i parametern

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.

Tag_slug__and och tag_slug__in Parametrar

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.

Sammanfattning

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.