WordPress/Kategorie mit eigenem Theme

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

In WordPress können Sie mit wenigen Schritten einen Unterbereich mit einer eigenen Leitfarbe oder einem eigenem Layout einrichten, der zwar zur Webseite gehört und dessen Inhalte über die Suche erreichbar sind, sich aber durch ein anderes Stylesheet oder gar anderes Template vom Standardlayout abhebt.

Ein solcher Unterbereich könnte aus allen Beiträgen einer bestimmten Kategorie mit der Kategorienübersicht als Hauptseite bestehen.

Vorüberlegungen

Die Benutzeroberfläche einer Webseite sollte so übersichtlich und zugänglich wie möglich sein. Dazu gehört auch, dass die (Haupt-)Navigation gleich bleibt und und der (meist im Logo befindliche) Backlink im Header immer auf die Startseite und nicht etwa auf die Kategorienübersicht verlinkt. Einen solchen weiteren Zurück-Link könnten Sie z. B. mit einer Breadcrumb-Navigation oder mit einem <p class="secondary-title"></p> erreichen.

Auf meinen Installationen bin ich einen Kompromiss eingegangen:

  • Ich habe eine Klasse im Body hinzugefügt, die bei bestimmten Kategorien als Selektor für ein eigenes Stylesheet dient.
  • Da Struktur und Seitenaufbau der Beiträge und Kategorienseiten gleich bleiben, habe ich hier auf eigene Templates verzichtet.
  • Allerdings soll der Header bei bestimmten Kategorien individuell gestaltet werden, sodass ich dort in der header.php des Child Themes eine if-Abfrage der in category eingebaut habe.

Templatehierarchie

WordPress bietet für verschiedene Seiten wie Startseite, Inhaltsseite, Beitrag oder Kategorienübersicht verschiedene Templates an. Diese werden in einer festen Ordnung abgefragt, wenn die Webseite zusammengestellt wird:

  1. category-slug.php
  2. category-ID.php
  3. category.php
  4. archive.php
  5. index.php

Unter einem Slug versteht man die „Titelform“, die lesbare URL-Variante des Namens. Sie besteht normalerweise nur aus Kleinbuchstaben, Zahlen und Bindestrichen. Sie wird für die Permalinks verwendet wird.[1] Sie lässt sich unter Beiträge > Kategorien > bearbeiten als „Titelform“ bearbeiten.

Diese Hierarchie findet sich im erzeugten Code in Form von Klassen im body-Element einer Kategorienübersicht wieder:

<body class="archive category category-hannes category-41 wp-embed-responsive tribe-js">

So sucht WordPress beim Seitenaufbau zuerst nach der category-hannes.php, die ein Template für diese Kategorie enthalten würde. Falls diese nicht gefunden wird, würde eine category-41.php gesucht werden. Danach wird das allgemeine Kategorien-Template category.php und falls auch dies fehlt, ein Archiv-Template wie archive.php geladen werden. Zuletzt wird die index.php mit dem Standard-Template zum Zusammenbau der Seite verwendet.

Template für Kategorienseite

Sie können eine Kategorienseite über die Klasse im body-Element mit CSS gestalten oder durch ein eigenes Template erweitern.

Am einfachsten ist es eine bestehende category.php oder archive.php-Datei aus dem Parent Theme zu kopieren und in einem Code-Editor als category-name.php abzuspeichern und dann in den Ordner des Child Themes hochzuladen.

Template für Beiträge

Der oben erwähnte category-slug, bzw die category-ID finden sich allerdings nicht als id oder Klasse auf normalen Beitragsseiten wieder. Deshalb müssen Sie das Template für Beiträge einer bestimmten Kategorie anpassen.

Klasse im Body hinzufügen

Der einfachste Schritt wäre es, jedem Beitrag den Slug als Klasse im body-Element hinzuzufügen. Mit der WordPress-eigenen Funktion body class können Sie dies erreichen[2]:

Add Category To Body Class
add_filter('body_class','add_category_to_single');
	function add_category_to_single($classes, $class) {
		if (is_single() ) {
			global $post;
			foreach((get_the_category($post->ID)) as $category) {
				// add category slug to the $classes array
				$classes[] = $category->category_nicename;
			}
		}
		// return the $classes array
		return $classes;
}

Kopieren Sie das Code-Snippet in die functions.php im Child Theme.

Einziger Schönheitsfehler ist der unterschiedliche Klassenname slug bei Beiträgen und category-slug bei der Kategorienseite.

single.php

Die serverseitige Zusammenstellung von Beitragsseiten wird von der single.php erledigt. Möchte man die Artikel einer bestimmten Kategorie anders darstellen als andere (z. B. mit einem speziellen Header), so kann man das ganze wie folgt lösen:

in_category

Die WordPress-eigene Funktion in_category() überprüft, ob der aktuelle Beitrag zu einer der angegebenen Kategorien gehört[3]

in_category( int|string|array $category, int|object $post = null )

eigene Templates laden

Sie können aber auch mit einer Abfrage die Kategorie überprüfen und dann entsprechende eigene Templates zuweisen[4]:


Beiträgen bestimmter Kategorien eigene Templates zuweisen
<?php $post = $wp_query->post;
if ( in_category('41') ) {
  include(TEMPLATEPATH . '/single_kategorie1.php');
} else if(in_category('42')) {
  include(TEMPLATEPATH . '/single_kategorie2.php');
} else if (in_category ('chronik')){
  include(TEMPLATEPATH . '/single_chronik.php');
}

else {
  include(TEMPLATEPATH . '/single_standard.php');
}
?>

Dabei können Sie sowohl die ID der Kategorie als auch den slug verwenden.


Weblinks


Quellen

  1. codex.wordpress.org: Glossary: slug
  2. forum.wpde: Template für alle Seiten bestimmter Kategorien
  3. developer.wordpress.org: in_category()
  4. perun.net: WordPress-Artikel einer bestimmten Kategorie sollen ein eigenes Template erhalten