Articles

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();

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.

WP list categories counters

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);

WP list categories counters parents

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);

categories description

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');

categories feeds

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.