WordPress Kategorien im Theme ausgeben

Jedem WordPress Beitrag ist mindestens eine, oft auch mehrere Kategorien zugewiesen. Dieses kurze Tutorial erklärt dir, wie du WordPress Kategorien im Theme anzeigen lassen kannst, sowohl für den jeweiligen Beitrag als auch außerhalb des WordPress Loops.

WordPress Kategorien des Beitrags anzeigen

Die Kategorien zu einem bestimmten Beitrag erhalten wir mit get_the_category_list().

$categories = get_the_category_list();

Rufen wir die Funktion ohne Parameter auf, erhalten wir eine ungeordnete HTML-Liste der Kategorien. Dabei werden nicht alle, sondern nur die Kategorien des jeweilligen Beitrags ausgegeben. Der Aufruf der Funktion sollte deshalb innerhalb des WordPress Loops erfolgen.

Als Theme Entwickler erstellst du am Besten deine eigene Template Funktion zur Ausgabe der Kategorien eines Beitrags. Diese könnte in etwa so aussehen:

if ( ! function_exists( 'theme_slug_entry_category' ) ) :
/**
 * Displays categories.
 */
function theme_slug_entry_category() {
  // Get categories.
  $categories_list = get_the_category_list();

  // Display categories.
  if ( $categories_list ) {
    echo $categories_list;
  }
}
endif;

Durch die Verwendung einer eigenen Theme Funktion kann die Ausgabe der Kategorien an zentraler Stelle gestaltet und an mehreren Stellen im Theme (Blog, Archive, Einzelansicht) verwendet werden. Der function_exists Wrapper sorgt dafür, dass Child Themes die Funktion einfach überschreiben können.

Da wir keine Argumente für get_the_category_list() übergeben, erhalten wir wie bereits erwähnt eine ungeordnete Liste.

<ul class="post-categories">
  <li><a href=".../category/allgemein/" rel="category tag">Allgemein</a></li>
  <li><a href=".../category/news/" rel="category tag">News</a></li>
</ul>

Diese können wir nun mit etwas CSS Code in unserer style.css nach Belieben gestalten.

WordPress Kategorien als einfache Links ausgeben

Durch die Angabe eines Leerzeichens als ersten Parameter können wir die Kategorien auch als einzelne Links anstatt einer Liste ausgeben. Neben einem Leerzeichen lassen sich die Kategorien auch mit einem Komma als Separator trennen.

$categories = get_the_category_list( ', ' );

Damit lässt sich beispielsweise eine Textzeile „Veröffentlicht in Kategorie A, Kategorie B“ anzeigen. Du kannst dafür die Template Funktion in deinem Theme wie folgt anpassen:

function theme_slug_entry_category() {

  // Get categories.
  $categories_list = get_the_category_list( ', ' );

  // Check if there are categories.
  if ( $categories_list ) {
    // Display categories.
    printf( '<span class="entry-categories">' . esc_html__( 'Posted in %1$s', 'theme-slug' ) . '</span>', $categories_list );
  }
}

Dabei wird folgender HTML Code ausgegeben:

<span class="entry-categories">
  Posted in <a href=".../category/allgemein/" rel="category tag">Allgemein</a>, <a href=".../category/news/" rel="category tag">News</a>
</span>

Im Normalfall wirst du nur den ersten Parameter von get_the_category_list() benötigen. Falls du jemals die Kategorien eines ganz bestimmten Beitrags außerhalb des WordPress Loops auflisten willst, kannst du jedoch mit dem dritten Parameter gezielt eine Post ID übergeben.

Alle WordPress Kategorien im Theme auflisten

Wir haben bisher gelernt, wie du die zugewiesenen Kategorien eines einzelnen Beitrags anzeigen kannst.

Eventuell möchtest du aber auch alle Kategorien der kompletten WordPress Installation im Theme auflisten – zum Beispiel als statische Navigation im Footer, in einem Sitemap Page Template oder als Vorschläge innerhalb des 404 Templates.

Für diesen Anwendungsfall steht die Funktion wp_list_categories() bereit.

wp_list_categories();

Die Funktion nimmt ein Array mit Argumenten entgegen. Eine vollständige Liste der Möglichkeiten findet man im oben verlinkten WordPress Developers Handbook. Es können beispielsweise die Anzahl der Beiträge pro Kategorie mit show_count oder Kategorien mit exclude ausgeschlossen werden:

$category_args = array(
	'orderby'    => 'name',
	'show_count' => true,
	'exclude'    => array( 10, 42 ),
);
wp_list_categories( $category_args );

Standardmäßig werden die Kategorien direkt ausgegeben, es kann jedoch auch der Parameter echo auf false gesetzt werden, womit die Kategorien als HTML String zurückgegeben und weiter verarbeitet werden können.

Fazit

Mit diesen beiden Funktionen lassen sich als Theme Entwickler die meisten Anwendungsfälle zur Auflistung aller WordPress Kategorien als Navigation, Liste oder einfache Links abbilden.