Hur du listar kategorier i WordPress med hjälp av Categories API
I en tidigare artikel såg vi hur du enkelt kan arbeta med kategorier i WordPress. Vi täckte hur vi kan sortera våra inlägg i olika kategorier, som sedan kan redigeras eller tas bort.
När vi har täckt grunderna är det nu dags att ta en titt på något som kommer att vara mer intressant för utvecklare: Categories API och hur man hämtar och visar kategoridata.
Likt Länshanterings-API:t är Categories API:t ett stort ämne, ännu större när det gäller antalet tillgängliga funktioner. I den här artikeln tar vi upp en funktion som är användbar när vi vill lista våra kategorier.
Lista kategorier
I Links Manager API hittar vi en viktig funktion som gör att vi kan lista våra länkar. Det är därför ingen överraskning att vi hittar samma sak i Categories API: wp_list_categories()
, detta är den funktion som vi kommer att arbeta med här.
I grund och botten måste du anropa den här funktionen på den plats där du vill se dina kategorier listade.
wp_list_categories();
Som du kan föreställa dig är det här resultatet helt anpassningsbart. För att forma det efter våra behov kan vi skicka ett argument till den här funktionen: en array som innehåller värden för de alternativ vi vill ställa in. Låt oss ta en titt på några av de tillgängliga alternativen.
Välja vilka kategorier som ska visas
För att se hur vi kan anpassa resultatet börjar vi med några alternativ som gör att vi kan välja vad som ska visas.
Inkludera och exkludera kategorier
Först hittar vi alternativet include
som accepterar en lista med kategori-ID:er som ska visas. När du använder det här alternativet kommer wp_list_categories()
endast att visa kategorierna med de ID:n som du har lämnat in. Du kan ange ett eller flera ID:n. Om du vill ange två eller flera ID måste du separera dessa nummer med ett kommatecken.
$args = array('include' => '15,16,9');wp_list_categories($args);
Om du å andra sidan inte vill välja vad som ska visas, utan snarare vad som inte ska visas, är alternativet exclude
för dig. Det kan användas precis som include
.
$args = array('exclude' => '15,16,9');
Observera att om du vill använda alternativet exclude
måste include
vara tomt (dess standardvärde). Annars vinner alternativet include
och endast de kategorier som överlämnats till det kommer att visas.
Ett annat alternativ för att utesluta kategorier är exclude_tree
. Återigen accepterar det en kommaseparerad lista med kategoriernas ID:er som ska uteslutas. Skillnaden är att det utesluter de valda kategorierna och alla deras barn. Observera att för att det här alternativet ska fungera måste du ställa in alternativet hierarchical
till 0
(vi kommer att se nedan vad det här alternativet gör).
// 14 is the ID of "My life", parent of "My goldfish" and "My garden" which will also be hidden$args = array('exclude_tree' => '14','hierarchical' => 0);
Ordning av utdata
Som standard listas kategorierna i alfabetisk ordning. Du kan ändra detta beteende tack vare alternativet orderby
, som accepterar en sträng. Du kan välja mellan följande alternativ: ID
för att ordna kategorierna efter deras ID (nej, verkligen?), name
för att sortera dem alfabetiskt (standardvärdet), slug
för att sortera dem i alfabetisk ordning efter deras sniglar och count
för att sortera efter antalet inlägg som de innehåller.
Den valda ordningen kan vändas om genom att ställa in DESC
(fallande) som värde för alternativet order
(som standard är det här alternativet inställt på ASC
(stigande)).
I exemplet nedan listar vi kategorierna efter antalet inlägg som de innehåller: eftersom ordningen är omvänd kommer den kategori som innehåller det största antalet inlägg att visas först.
$args = array('orderby' => 'count','order' => 'DESC');
Begränsar antalet visade kategorier
När vi väl har ordnat våra kategorier kan vi vilja begränsa antalet poster som visas. Detta kan göras med hjälp av alternativet number
. Som standard är detta alternativ inställt på null
och det finns ingen begränsning så alla kategorier visas. Genom att ange ett antal kan du definiera det maximala antalet kategorier som ska visas. Vi kan till exempel lista de fem mest använda kategorierna.
$args = array('orderby' => 'count','order' => 'DESC','number' => 5);
Detta exempel listar de kategorier som har flest inlägg. En annan lösning är att dölja de oanvända kategorierna. För att göra det kan vi använda hide_empty
, en boolean som är inställd på 1
som standard: tomma kategorier visas inte. Du kan välja att visa dem genom att ställa in detta till 0
.
// Show me all the categories, even the empty ones$args = array('hide_empty' => 0);
Specificering av detaljer som ska visas
Detaljer är viktiga och det finns alltid några som vi vill inkludera.
Counters!
Det är till exempel möjligt att du vill visa antalet inlägg som ingår i varje kategori. För att visa detta kan du använda alternativet show_count
och ställa in det på 1
. Som standard är detta boolean inställt på 0
och denna räkning visas inte.
$args = array('show_count' => 1);
Bemärk att ett inlägg i en underkategori också läggs till det totala antalet inlägg i dess överordnade kategori. Till exempel är skärmbilden nedan tagen med tre inlägg i kategorin ”Mitt liv”: medan det bara finns ett inlägg i denna kategori finns de två andra i underkategorierna.
Du kan ändra detta beteende med hjälp av alternativet pad_counts
. Om du ställer in detta på 0
kommer föräldrarnas räkningar endast att visa antalet inlägg i dessa föräldrars kategorier och inte inkludera inläggen i deras barnkategorier.
$args = array('show_count' => 1,'pad_counts' => 0);
Kategoriernas beskrivningar
Som vi såg i vår tidigare artikel kan vi ställa in en beskrivning för våra kategorier. Denna beskrivning kan visas med alternativet use_desc_for_title
. Det är ett boolean som är inställt på 1
som standard: beskrivningar visas i attributet title
för länkarna i listan. Om du inte vill se den här beskrivningen kan du ställa in den på 0
.
$args = array('use_desc_for_title' => 1);
Feeds
Såväl som WordPress genererar ett flöde för dina inlägg, skapar det också ett för varje kategori. Besökare kan välja att bara följa uppdateringarna för de kategorier de är intresserade av, om de inte gillar allt ditt innehåll.
Länkarna till dessa flöden kan visas i listan över våra kategorier, tack vare alternativet feed
. Som standard är det här alternativet inställt på en tom sträng och länkarna visas inte. Koden nedan visar hur du aktiverar detta alternativ.
$args = array('feed' => 'RSS');
Som standard är det RSS2-flödet som länkas. Men WordPress kan generera fler typer av flöden. Om du till exempel föredrar Atom kan du tvinga WordPress att visa den typen av flöde istället för RSS2.
För att välja vilken typ av flöde som ska visas kan du ange något av följande alternativ : atom
, rss
, rss2
och rdf
.
$args = array('feed' => 'Atom','feed_type' => 'atom');
Slutligt, om du föredrar att använda en bild för att länka till dina RSS-flöden, kan du ange URL:en för den bild du vill se i alternativet feed_image
. Texten i alternativet feed
blir då den alternativa texten för bilden.
$args = array('feed' => 'RSS','feed_image' => 'http://website.org/my-awesome-rss-image.png');
Är den här kategorin den aktuella?
Om du använder wp_list_categories()
på en arkivsida (i mallen archive.php
) kan du se att den aktuella kategorin (den som visas av arkivsidan) är framhävd: taggen li
som omsluter länken till den här kategorin har en klass mer än de andra, med namnet current-cat
. Du behöver inte göra något för att aktivera det här beteendet, och du kan inte avaktivera det (men det står dig fritt att inte använda det i din CSS!).
Det kanske dock är ett beteende som du vill se på fler sidor, till exempel de som visar ett inlägg. Den goda nyheten är att du kan göra det, tack vare alternativet current_category
. Detta boolean är inställt på 0
som standard. Genom att ställa in den till 1
kommer den aktuella kategorin att markeras med den tidigare citerade klassen.
$args = array('current_category' => 1);
Till exempel, låt oss anta att vi visar listan över våra kategorier på mallen single.php
. Då, med den tidigare matrisen, markeras kategorin för det aktuella inlägget tack vare klassen current-cat
. Allt vi behöver göra nu för att visa den är att lägga till lämplig CSS.
Visa hierarkin
Om du har många kategorier är det en bra idé att organisera dem i logiska hierarkier, där vi hittar överordnade kategorier och deras barn under dem. Det finns ett antal alternativ för att hantera visning av hierarkier.
Vi tittar först på hierarchical
. Det är ett boolean som som standard är inställt på 1
, varvid wp_list_categories()
visar hierarkin mellan kategorierna (med föräldrar och barn), precis som i skärmdumparna sedan början av den här artikeln. Om du inte vill visa hierarkin kan du ställa in den på 0
: dina kategorier kommer då att listas i en kolumn utan indragning av barnkategorierna.
Notera bieffekten av hierarchical
: om du väljer att visa hierarkin kommer de överordnade kategorierna alltid att visas, även om de är tomma och alternativet hide_empty
är inställt på 1
.
// Don't show me the hierarchy$args = array('hierarchical' => 0);
Du kan också använda hierarkin för att göra andra saker, som att visa barnen till en viss kategori med hjälp av child_of
. Vi kan beskriva det som motsatsen till exclude_tree
: vi ger det ID för en kategori och wp_list_categories()
visar endast dess barn. Namnet på den överordnade kategorin visas dock inte.
// Show me all the children of this category$args = array('child_of' => 14);
Till skillnad från exclude_tree
kan vi bara överlämna ett enda ID till child_of
.
Med alternativet depth
kan du styra antalet nivåer som kan visas i listan. Det kan vara användbart om du älskar kategorier och har ett komplext träd med många generationer. Som standard är det inställt på 0
och visar alla generationer. I exemplet nedan visas endast två nivåer av kategorier: föräldrarna och deras barn på första nivån. Om dessa barn har egna barnkategorier visas de inte.
$args = array('depth' => 2);
Bemärk att depth
är länkad till hierarchical
. Om du anger hierarchical
till 0
är det faktiskt meningslöst att ange ett värde för depth
: alla kategorier kommer att visas, oavsett vilken nivå de befinner sig på i trädet. Tvärtom kan du också åsidosätta värdet för hierarchical
med depth
i ett fall: du anger depth
till -1
. Effekten av detta värde är att alla kategorier visas utan någon relation. Alla kategorier kommer att visas i en kolumn, även om hierarchical
är inställd på 1
.
Kontroll av utdata
Som standard visar wp_list_categories()
listan över våra kategorier. Om du inte vill ha det och föredrar att lagra resultatet i en variabel för att visa det senare kan du ställa in echo
till 0
.
$args = array('echo' => 0);$cats = wp_list_categories($args);
Detta kan vara användbart om du vill ändra listan innan du visar den.
Nästan, låt oss titta på show_option_none
. Om wp_list_categories()
inte hittar någon kategori (det kan till exempel hända om de andra alternativen är för restriktiva) visas som standard texten ”Inga kategorier”. Du kan ändra detta till den text du vill ha med det här alternativet:
$args = array('show_option_none' => 'Nothing found :(');
Nästa title_li
. I våra tester har du kanske lagt märke till att listan över kategorier kapslas in i ett objekt i en annan lista. Detta kan vara användbart om du till exempel använder wp_list_categories()
i en meny. Dessutom visar WordPress en titel för den här listan, som som standard är ”Categories”.
Du kan ändra den här standardtiteln eller till och med inaktivera den genom att leka med title_li
. Den accepterar en sträng som är den titel som ska visas. Om du ger det här alternativet en tom sträng kommer listan med kategorier inte att kapslas in i en annan lista alls.
$args = array('title_li' => 'My awesome categories');
Var försiktig: om du inaktiverar visningen av listan med en tom sträng måste du omsluta din lista med ul
-taggar!
Gillar du inte listor? Du kommer att älska alternativet style
: som standard är det inställt på list
och wp_list_categories()
visar kategorier som listobjekt. Om du ställer in style
till none
kommer dina kategorier att separeras med br
-taggar.
$args = array('style' => 'none');
Slutligt kan du be WordPress att visa en länk till alla dina kategorier tack vare alternativet show_option_all
. Du ger en sträng till det här alternativet och WordPress kommer att visa en ny länk som pekar på alla dina kategorier.
$args = array('show_option_all' => 'All categories');
Slutsats
Det var allt för wp_list_categories()
. Antalet alternativ som finns tillgängliga för den här funktionen är ganska stort, som du kan se.
Självklart är Categories API inte begränsat till den här funktionen. Det är dock en viktig funktion: om du inte har något specifikt behov och bara vill ha en grundläggande lista över kategorier ska du inte leta efter någon annan funktion, den här är ditt enklaste alternativ!
Bemärk att vi i den här artikeln inte pratade om wp_dropdown_categories()
. Den här funktionen visar våra kategorier i ett rullgardins HTML-element. Liksom wp_list_categories()
kan dess utdata anpassas helt och hållet tack vare en rad alternativ. Dessa alternativ liknar dem som finns tillgängliga med wp_list_categories()
, så vi kommer inte att beskriva dem här. Den enda svårigheten är att vissa alternativ har andra standardvärden. Om du vill veta mer om wp_dropdown_categories()
kan du gå till WordPress Codex.
Men det finns fortfarande andra fall: Vad händer om vi vill visa våra kategorier på ett speciellt sätt? I det här fallet är wp_list_categories()
inte tillräckligt flexibel, eftersom vi måste bygga vårt eget DOM-träd. Därför ska vi i nästa artikel ta en titt på några andra användbara funktioner i Categories API.