Seitentitel im Thematic Theme anpassen mit dem thematic_doctitle Filter

Ich nutze für einen Blog das Thematic Theme. Es stellt die Grundlage für eigene sogenannte Child Themes bereits und kann in vielfältiger Weise angepasst werden. Thematic stellt zusätzlich zu den normalen WordPress Actions und Filtern eigene Theme Action Hooks und Theme Filter bereit.

Einige davon sind auch sehr gut dokumentiert oder es gibt Beispiele im Netz dazu. Ich wollte auf dem Blog nun aber einen Text an den Seitentitel (also den Text innerhalb der <title> Tags im <head>) jeder einzelnen Seite anhängen. Zwar wird die Funktion thematic_doctitle() auf der Seite der Theme Filter ausführlich in einem Beispiel behandelt, ich konnte mir aber nicht vorstellen, dass es so kompliziert und mit so vielen Zeilen Quellcode geschrieben werden muss. Daher bin ich mal wieder in den Quellcode eintauchen um die entsprechende Stelle zu finden, an der die Funktion definiert ist.

Der thematic_doctitle Filter

Der Quellcode zum Filter befindet sich in der Datei „wp-content/themes/thematic/library/extensions/header-extensions.php“ ab Zeile 26 (in Thematic Version 0.9.6.2). Der interessante Teil sieht wie folgt aus:

	// Filters should return an array
	$elements = apply_filters('thematic_doctitle', $elements);

	// But if they don't, it won't try to implode
	if(is_array($elements)) {
		$doctitle = implode(' ', $elements);
	}
	else {
		$doctitle = $elements;
	}

	$doctitle = "t" . "<title>" . $doctitle . "</title>" . "nn";

	echo $doctitle;

Wie ich also feststellen konnte, kann die Rückgabe eines eigenen Filters entweder ein String oder ein Array sein. Sollte es ein Array sein, werden die einzelnen Elemente mit Hilfe der implode() Funktion zu einem String verbunden. Ich habe zusätzlich den Inhalt des Arrays analysiert. Je nach Seite besteht es nur aus einem einelementigen Array oder aber auch mehreren Teilen, die durch einen „Separator“ voneinander getrennt werden.

Den Titel mit einer Funktion erweitern

Im Grunde war es aber für meine Zwecke unerheblich, wie es aussieht, da ich nur etwas hinten anfügen wollte. Also habe ich eine einfache Funktion geschrieben, die den Titel mit Hilfe des Filters erweitert:

function my_doctitle($doctitle) {
	return array_merge($doctitle, array('suffix' => '| example.com'));
}
add_filter('thematic_doctitle','my_doctitle');

Diese kleine Funktion fügt dem Array $doctitle ein Array mit dem Schlüssel „suffix“ hinzu. Mit der array_merge() Funktion wird es mit dem originalen Array zu einem neuen „gemerged“ und direkt wieder zurückgegeben.

Fazit

Statt also laut dem Beispiel im Guide zum Thematic Theme den Filter thematic_doctitle fast komplett zu kopieren um dann nur einen kleinen String anzuhängen, hat es sich mal wieder ausgezahlt sich mit dem Quellcode zu beschäftigen. So konnten wir in nur vier Zeilen das gewünschte Ergebnis erzielen.

Da ich sehr viele Filter und Action Hooks in meiner functions.php Datei verwende, lohnt es sich umso mehr nachzuschauen, ob es nicht auch einfacher geht. Sonst habe ich nämlich am Ende die Hälfte (oder sogar mehr) der verwendeten Filter aus dem Thematic Theme in meine functions.php kopiert, ohne es wirklich zu müssen.

Ich hoffe ich konnte euch einmal mehr zeigen, dass man sich nicht davor scheuen sollte auch mal den Quellcode eines Produkts zu studieren, das man verwenden und erweitern möchte. Mir hat es nicht nur in diesem Fall viel Arbeit gespart.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

1 Kommentar » Schreibe einen Kommentar

  1. Guter Tipp. Ich benutze jetzt zwar schon eine ganze Weile Thematic, aber auf diese einfache Lösung war ich bisher nicht gekommen.

    Vielen Dank, dass kann ich sicher beim nächsten Child Theme einsetzen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert