Articles

Kategorien in WordPress mit der Kategorien-API auflisten

In einem früheren Artikel haben wir gesehen, wie man in WordPress einfach mit Kategorien arbeiten kann. Wir haben behandelt, wie wir unsere Beiträge in verschiedene Kategorien sortieren können, die dann bearbeitet oder gelöscht werden können.

Nachdem wir die Grundlagen behandelt haben, ist es nun an der Zeit, einen Blick auf etwas zu werfen, das für Entwickler von größerem Interesse sein wird: die Kategorien-API und wie man Kategoriedaten abruft und anzeigt.

Wie die Links-Manager-API ist auch die Kategorien-API ein großes Thema, sogar noch größer, was die Anzahl der verfügbaren Funktionen angeht. In diesem Artikel werden wir eine Funktion behandeln, die nützlich ist, wenn wir unsere Kategorien auflisten wollen.

Kategorien auflisten

In der Links Manager API finden wir eine wichtige Funktion, die es uns erlaubt, unsere Links aufzulisten. Es ist daher nicht überraschend, dass wir dasselbe in der Kategorien-API finden: wp_list_categories(), das ist die Funktion, mit der wir hier arbeiten werden.

Grundsätzlich müssen Sie diese Funktion an der Stelle aufrufen, an der Sie Ihre Kategorien aufgelistet sehen wollen.

wp_list_categories();

WP list categories

Wie Sie sich vorstellen können, ist dieses Ergebnis vollständig anpassbar. Um es an unsere Bedürfnisse anzupassen, können wir dieser Funktion ein Argument übergeben: ein Array mit Werten für die Optionen, die wir einstellen wollen. Werfen wir einen Blick auf einige der verfügbaren Optionen.

Auswahl der anzuzeigenden Kategorien

Bevor wir uns ansehen, wie wir die Ausgabe anpassen können, beginnen wir mit einigen Optionen, die es uns erlauben, auszuwählen, was angezeigt werden soll.

Kategorien ein- und ausschließen

Zunächst finden wir die Option include, die eine Liste von Kategorie-IDs akzeptiert, die angezeigt werden sollen. Wenn Sie diese Option verwenden, zeigt wp_list_categories() nur die Kategorien mit den von Ihnen angegebenen IDs an. Sie können eine oder mehrere IDs angeben. Wenn Sie zwei oder mehr IDs angeben möchten, müssen Sie diese Nummern durch ein Komma trennen.

$args = array('include' => '15,16,9');wp_list_categories($args);

Wenn Sie hingegen nicht auswählen möchten, was angezeigt werden soll, sondern was nicht angezeigt werden soll, ist die Option exclude für Sie geeignet. Sie kann genau wie include verwendet werden.

$args = array('exclude' => '15,16,9');

Wenn Sie die Option exclude verwenden möchten, muss include leer sein (Standardwert). Andernfalls gewinnt die Option include und es werden nur die ihr übergebenen Kategorien angezeigt.

Eine weitere Option zum Ausschluss von Kategorien ist exclude_tree. Auch hier wird eine durch Kommata getrennte Liste der auszuschließenden Kategorie-IDs akzeptiert. Der Unterschied ist, dass die ausgewählten Kategorien und alle ihre Unterkategorien ausgeschlossen werden. Damit diese Option funktioniert, müssen Sie die Option hierarchical auf 0 setzen (wir werden weiter unten sehen, was diese Option bewirkt).

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

Organisation der Ausgabe

Standardmäßig werden die Kategorien in alphabetischer Reihenfolge aufgeführt. Sie können dieses Verhalten mit der Option orderby ändern, die eine Zeichenkette akzeptiert. Sie können zwischen den folgenden Optionen wählen: ID, um die Kategorien nach ihrer ID zu sortieren (nein, wirklich?), name, um sie alphabetisch zu sortieren (der Standardwert), slug, um sie in der alphabetischen Reihenfolge ihrer Slugs zu sortieren, und count, um sie nach der Anzahl der Beiträge zu sortieren, die sie enthalten.

Die gewählte Reihenfolge kann umgekehrt werden, indem DESC (absteigend) als Wert für die Option order gesetzt wird (standardmäßig ist diese Option auf ASC (aufsteigend) gesetzt).

Im folgenden Beispiel werden die Kategorien nach der Anzahl der darin enthaltenen Beiträge aufgelistet: Da die Reihenfolge umgekehrt ist, wird die Kategorie mit den meisten Beiträgen als erste angezeigt.

$args = array('orderby' => 'count','order' => 'DESC');

Anzahl der angezeigten Kategorien begrenzen

Nachdem wir unsere Kategorien geordnet haben, möchten wir vielleicht die Anzahl der aufgelisteten Artikel begrenzen. Dies kann mit der Option number erreicht werden. Standardmäßig ist diese Option auf null gesetzt und es gibt keine Begrenzung, so dass alle Kategorien angezeigt werden. Durch Angabe einer Zahl können Sie die maximale Anzahl der anzuzeigenden Kategorien festlegen. So können beispielsweise die fünf am häufigsten verwendeten Kategorien aufgelistet werden.

$args = array('orderby' => 'count','order' => 'DESC','number' => 5);

In diesem Beispiel werden die Kategorien mit der größten Anzahl von Beiträgen aufgelistet. Eine andere Lösung besteht darin, die nicht verwendeten Kategorien auszublenden. Dazu können wir hide_empty verwenden, einen Booleschen Wert, der standardmäßig auf 1 gesetzt ist: leere Kategorien werden nicht angezeigt. Sie können sie anzeigen lassen, indem Sie diese Option auf 0 setzen.

// Show me all the categories, even the empty ones$args = array('hide_empty' => 0);

Anzuzeigende Details festlegen

Details sind wichtig, und es gibt immer einige, die wir einbeziehen möchten.

Zähler!

Sie möchten zum Beispiel die Anzahl der Beiträge in jeder Kategorie anzeigen. Um dies anzuzeigen, können Sie die Option show_count verwenden und sie auf 1 setzen. Standardmäßig ist dieser Boolesche Wert auf 0 gesetzt und die Anzahl wird nicht angezeigt.

$args = array('show_count' => 1);

Beachten Sie, dass ein Beitrag in einer untergeordneten Kategorie auch zur Gesamtzahl der Beiträge der übergeordneten Kategorie hinzugefügt wird. Der folgende Screenshot zeigt zum Beispiel drei Beiträge in der Kategorie „Mein Leben“: Während es in dieser Kategorie nur einen Beitrag gibt, befinden sich die beiden anderen in den Unterkategorien.

WP list categories counters

Dieses Verhalten können Sie mit der Option pad_counts ändern. Wenn du diese Option auf 0 setzt, wird die Anzahl der Beiträge in den Elternkategorien nur die Anzahl der Beiträge in diesen Elternkategorien anzeigen und nicht die Beiträge in den Unterkategorien.

$args = array('show_count' => 1,'pad_counts' => 0);

WP list categories counters parents

Beschreibungen der Kategorien

Wie wir in unserem vorherigen Artikel gesehen haben, können wir eine Beschreibung für unsere Kategorien festlegen. Diese Beschreibung kann mit der Option use_desc_for_title angezeigt werden. Es ist ein Boolescher Wert, der standardmäßig auf 1 gesetzt ist: Beschreibungen werden im title-Attribut der Links in der Liste angezeigt. Wenn Sie diese Beschreibung nicht sehen wollen, können Sie sie auf 0 setzen.

$args = array('use_desc_for_title' => 1);

categories description

Feeds

WordPress erzeugt einen Feed für Ihre Beiträge und auch für jede Kategorie. Besucher können wählen, ob sie nur die Updates der Kategorien verfolgen wollen, die sie interessieren, wenn sie nicht alle Ihre Inhalte mögen.

Die Links zu diesen Feeds können in der Liste unserer Kategorien angezeigt werden, dank der Option feed. Standardmäßig ist diese Option auf eine leere Zeichenkette gesetzt und die Links werden nicht angezeigt. Der folgende Code zeigt, wie man diese Option aktiviert.

$args = array('feed' => 'RSS');

categories feeds

Standardmäßig ist der verlinkte Feed der RSS2-Feed. WordPress kann aber weitere Feed-Typen generieren. Wenn Sie beispielsweise Atom bevorzugen, können Sie WordPress zwingen, diesen Feed-Typ anstelle des RSS2-Feeds anzuzeigen.

Um den Feed-Typ auszuwählen, den Sie angezeigt bekommen möchten, können Sie eine der folgenden Optionen angeben: atom, rss, rss2 und rdf.

$args = array('feed' => 'Atom','feed_type' => 'atom');

Wenn Sie es vorziehen, ein Bild als Link zu Ihren RSS-Feeds zu verwenden, können Sie die URL des gewünschten Bildes in der Option feed_image angeben. Der Text in der Option feed wird dann zum Alternativtext für das Bild.

$args = array('feed' => 'RSS','feed_image' => 'http://website.org/my-awesome-rss-image.png');

Ist diese Kategorie die aktuelle?

Wenn Sie wp_list_categories() auf einer Archivseite (in der Vorlage archive.php) verwenden, können Sie sehen, dass die aktuelle Kategorie (die von der Archivseite angezeigt wird) hervorgehoben ist: der li-Tag, der den Link zu dieser Kategorie umschließt, hat eine Klasse mehr als die anderen, nämlich current-cat. Sie müssen nichts tun, um dieses Verhalten zu aktivieren, und Sie können es auch nicht deaktivieren (aber es steht Ihnen frei, es in Ihrem CSS nicht zu verwenden!).

Vielleicht ist es aber ein Verhalten, das Sie auf mehr Seiten sehen möchten, z. B. auf denen, die einen Beitrag anzeigen. Die gute Nachricht ist, dass Sie das dank der Option current_category können. Dieser Boolesche Wert ist standardmäßig auf 0 eingestellt. Wenn Sie es auf 1 setzen, wird die aktuelle Kategorie mit der zuvor zitierten Klasse hervorgehoben.

$args = array('current_category' => 1);

Nehmen wir zum Beispiel an, dass wir die Liste unserer Kategorien auf der Vorlage single.php anzeigen. Dann wird mit dem vorherigen Array die Kategorie des aktuellen Beitrags dank der Klasse current-cat hervorgehoben. Alles, was wir jetzt tun müssen, um sie anzuzeigen, ist, das entsprechende CSS hinzuzufügen.

Anzeigen der Hierarchie

Wenn Sie viele Kategorien haben, ist es eine gute Idee, sie in logischen Hierarchien zu organisieren, in denen wir übergeordnete Kategorien und ihre Kinder darunter finden. Es gibt eine Reihe von Optionen für die Anzeige von Hierarchien.

Wir sehen uns zuerst hierarchical an. Es ist ein Boolescher Wert, der standardmäßig auf 1 gesetzt ist, wobei wp_list_categories() die Hierarchie zwischen den Kategorien (mit Eltern und Kindern) anzeigt, genau wie in den Screenshots seit Beginn dieses Artikels. Wenn Sie Ihre Hierarchie nicht anzeigen möchten, können Sie 0 einstellen: Ihre Kategorien werden dann in einer Spalte ohne Einrückung der untergeordneten Kategorien aufgeführt.

Beachten Sie den Nebeneffekt von hierarchical: Wenn Sie sich für die Anzeige der Hierarchie entscheiden, werden die übergeordneten Kategorien immer angezeigt, auch wenn sie leer sind und die Option hide_empty auf 1 gesetzt ist.

// Don't show me the hierarchy$args = array('hierarchical' => 0);

Sie können die Hierarchie auch für andere Dinge verwenden, z. B. für die Anzeige der Kinder einer bestimmten Kategorie mit child_of . Man könnte es als das Gegenteil von exclude_tree beschreiben: man gibt ihm die ID einer Kategorie und wp_list_categories() zeigt nur deren Kinder an. Der Name der übergeordneten Kategorie wird jedoch nicht angezeigt.

// Show me all the children of this category$args = array('child_of' => 14);

Im Gegensatz zu exclude_tree kann child_of nur eine einzige ID übergeben werden.

Mit der Option depth können Sie die Anzahl der Ebenen festlegen, die in der Liste angezeigt werden können. Sie kann nützlich sein, wenn Sie Kategorien lieben und einen komplexen Baum mit vielen Generationen haben. Standardmäßig ist sie auf 0 eingestellt und zeigt alle Generationen an. Das folgende Beispiel zeigt nur zwei Ebenen von Kategorien: die Eltern und ihre Kinder der ersten Ebene. Wenn diese Kinder ihre eigenen Unterkategorien haben, werden sie nicht angezeigt.

$args = array('depth' => 2);

Beachten Sie, dass depth mit hierarchical verknüpft ist. Wenn Sie hierarchical auf 0 setzen, ist es sinnlos, depth einen Wert zuzuweisen: Alle Kategorien werden angezeigt, unabhängig von ihrer Ebene im Baum. Sie können aber auch den Wert von hierarchical mit depth in einem Fall überschreiben: Sie setzen depth auf -1. Dieser Wert bewirkt, dass alle Kategorien ohne jede Beziehung angezeigt werden. Alle Kategorien werden in einer Spalte angezeigt, auch wenn hierarchical auf 1 gesetzt ist.

Steuerung der Ausgabe

Standardmäßig zeigt wp_list_categories() die Liste unserer Kategorien an. Wenn Sie das nicht wollen und es vorziehen, das Ergebnis in einer Variablen zu speichern, um es später anzuzeigen, können Sie echo auf 0 setzen.

$args = array('echo' => 0);$cats = wp_list_categories($args);

Dies kann nützlich sein, wenn Sie die Liste vor der Anzeige ändern wollen.

Nächste Betrachtung: show_option_none. Wenn wp_list_categories() keine Kategorie findet (was zum Beispiel passieren kann, wenn die anderen Optionen zu restriktiv sind), wird standardmäßig der Text „Keine Kategorien“ angezeigt. Sie können dies mit dieser Option in den gewünschten Text ändern.

$args = array('show_option_none' => 'Nothing found :(');

Weiter title_li. In unseren Tests haben Sie vielleicht bemerkt, dass die Liste der Kategorien in einem Element einer anderen Liste gekapselt ist. Dies kann nützlich sein, wenn Sie wp_list_categories() zum Beispiel in einem Menü verwenden. Außerdem zeigt WordPress einen Titel für diese Liste an, der standardmäßig „Kategorien“ lautet.

Sie können diesen Standardtitel ändern oder ihn sogar deaktivieren, indem Sie mit title_li spielen. Sie akzeptiert eine Zeichenkette, die den anzuzeigenden Titel darstellt. Wenn Sie dieser Option eine leere Zeichenkette geben, wird die Liste der Kategorien überhaupt nicht in eine andere Liste eingekapselt.

$args = array('title_li' => 'My awesome categories');

Achtung: Wenn Sie die Anzeige der Liste mit einer leeren Zeichenkette deaktivieren, müssen Sie Ihre Liste in ul Tags einschließen!

Sie mögen keine Listen? Dann werden Sie die Option style lieben: standardmäßig ist sie auf list eingestellt und wp_list_categories() zeigt Kategorien als Listenelemente an. Wenn Sie style auf none setzen, werden Ihre Kategorien durch br Tags getrennt.

$args = array('style' => 'none');

Schließlich können Sie WordPress bitten, einen Link zu all Ihren Kategorien anzuzeigen, dank der Option show_option_all. Sie geben dieser Option eine Zeichenkette, und WordPress zeigt einen neuen Link an, der auf alle Ihre Kategorien verweist.

$args = array('show_option_all' => 'All categories');

Abschluss

Das war’s für wp_list_categories(). Die Anzahl der Optionen, die für diese Funktion zur Verfügung stehen, ist ziemlich groß, wie Sie sehen können.

Natürlich ist die Kategorien-API nicht auf diese Funktion beschränkt. Es ist jedoch eine wichtige Funktion: Wenn Sie keine speziellen Anforderungen haben und nur eine einfache Liste von Kategorien wollen, suchen Sie nicht nach einer anderen Funktion, diese ist Ihre einfachste Option!

Beachten Sie, dass wir in diesem Artikel nicht über wp_dropdown_categories() gesprochen haben. Diese Funktion zeigt unsere Kategorien in einem Dropdown-HTML-Element an. Wie wp_list_categories() kann die Ausgabe dank einer Reihe von Optionen vollständig angepasst werden. Diese Optionen ähneln denen von wp_list_categories(), so dass wir sie hier nicht beschreiben. Die einzige Schwierigkeit besteht darin, dass einige Optionen andere Standardwerte haben. Um mehr über wp_dropdown_categories() zu erfahren, können Sie den WordPress Codex besuchen.

Aber es gibt noch andere Fälle: Was ist, wenn wir unsere Kategorien auf eine besondere Weise anzeigen wollen? In diesem Fall ist wp_list_categories() nicht flexibel genug, da wir unseren eigenen DOM-Baum erstellen müssen. Deshalb werden wir uns im nächsten Artikel einige andere nützliche Funktionen der Kategorien-API ansehen.