WordPress Theme in Abhängigkeit wechseln

WordPress wird mitunter nicht nur als Blogplattform eingesetzt; denken wir an die Anwendung CMS oder Präsentation von Fotos, so sind das nur einige wenige aus der großen Auswahl. Nicht selten will man dabei für die unterschiedlichsten Abhängigkeiten ein anderes Design laden. So hat meist der Photoblog ein anderes Design als der Weblog. Im Grunde kann man das recht einfach machen und nicht immer muss man dazu eine umfangreiche Abfrage in die Templates bauen oder gar verschieden Installation von WordPress einrichten. Ebenso kann man sich mit der folgenden gezeigten Lösung mehr Übersicht der getrennten Themes erarbeiten. Im Zuge eines individuellen Designs, wie es beispielsweise bei Nico oder Gerrit diskutiert wird, hat man so recht viele Möglichkeiten.

WordPress wird mitunter nicht nur als Blogplattform eingesetzt; denken wir an die Anwendung CMS oder Präsentation von Fotos, so sind das nur einige wenige aus der großen Auswahl. Nicht selten will man dabei für die unterschiedlichsten Abhängigkeiten ein anderes Design laden. So hat meist der Photoblog ein anderes Design als der Weblog.

Im Grunde kann man das recht einfach machen und nicht immer muss man dazu eine umfangreiche Abfrage in die Templates bauen oder gar verschieden Installation von WordPress einrichten. Ebenso kann man sich mit der folgenden gezeigten Lösung mehr Übersicht der getrennten Themes erarbeiten. Im Zuge eines individuellen Designs, wie es beispielsweise bei Nico oder Gerrit diskutiert wird, hat man so recht viele Möglichkeiten.

Mit WordPress 2.8

Mit der kommenden Version von WordPress wird es dazu einen Template Tag geben - body_class(), der diverse Klassen dem body-Tag zuordnet, damit wird die Induvidialität gefördert, oder auch die Syntaxmenge. Hintergründe hat Michael berichtet, inklusive aller möglichen Klassen. Alternativ kann man bei Andrew nachlesen, der die neue Funktion auch schon analysiert hat.


<body <?php body_class(); ?>>

Die Ausgabe könnte dann beispielsweise wie folgt aussehen.


<body class="page-template page-template-tutorial-php logged-in">

Alles anders

Aber auch ohne das Warten auf WordPress 2.8 und das Suchen der Klassen gibt es eine schöne und saubere Lösung, wie ich finde. Ich trenne dazu die entsprechenden Themes, wenn es sich um extreme Unterschiede handelt, so zum Beispiel zwischen Weblog und Photoblog. In diesem Fall frage ich die Kategorie ab, die nur für Bilder da ist und aktiviere dann ein anderes Theme für die Ausgabe im Frontend.

Mit dieser Grundidee kann man recht viel anstellen und so habe ich mal einige Beispiele aus meinen bisherigen Anwendungen gelistet, wählt selbst, welche Möglichkeiten ihr nutzen möchtet.

Um die Möglichkeit zu nutzen, lagert ihr die Funktion entweder in die functions.php des Themes aus, welches im Backend von WordPress auf Aktiv gesetzt ist, oder ihr speichert es als Plugin. Auch dafür habe ich ein wenig vorbereitet und so findet ihr mein kleines Plugins, welches nur via Code zu ändern ist, also keine Options-Oberfläche mitbringt, auf der entsprechenden Seite zum Plugin „User Theme“.


function fb_user_theme( $template = '' ) {

	// de_DE: Leerzeichen im Namen des Themes muessen mit _ (underline) ersetzt werden!

	// when Profil-ID
	if ( get_profile('ID') == 123 ) {
		$template = 'default';
	}

	// when IP
	if ( $_SERVER['REMOTE_ADDR'] == '127.0.0815.1' ) {
		$template = 'classic';
	}
	
	// when User_Level
	// @see http://codex.wordpress.org/Roles_and_Capabilities#Roles
	if ( current_user_can('level_10') ) {
		$template = 'classic';
	}

	elseif ( current_user_can('level_5') ) {
		$template = 'classic';
	}
	
	elseif ( current_user_can('level_2') ) {
		$template = 'default';
	}
	
	// when category with ID
	if ( in_category('1') ) {
		$template = 'default';
	}
	
	return $template;
}

add_filter('template', 'fb_user_theme');
add_filter('stylesheet', 'fb_user_theme');

Im Grunde ist es ganz einfach: wenn eine entsprechende Bedingung wahr ist, wie zum Beispiel Kategorie mit der ID 1, dann wird das default-Theme geladen, ansonsten wird immer das Theme geladen, welches im Backend aktiv ist.
In der Funktion wird als der Name des Themes an die Variable $template übergeben und mit Hilfe der beiden Filter wird das Template und das Stylesheet des übergebenen Theme-Namen aktiviert.

Der übergeben Name des Themes kann in der Beschreibung Leerzeichen enthalten, die hier in der Funktion mit _ (underline) ersetzt werden, bitte daran denken, sonst erkennt WordPress das Theme nicht.

Mit diesen kleinen und einfachen Möglichkeit kann man viele Umwege sparen, Installationen von WordPress zusammenfassen und behält trotzdem eine saubere Trennung der Themes. In der Funktion können natürlich alle Arten von Conditional Tags (Hinweise dazu: hier und hier) genutzt werden und so ist auch denkbar, dass statische Seiten oder Beiträge mit bestimmten Tags ein anderes Design erhalten.

Comments are closed.