Michael Oeser - Fotografie, Film, Webdesign - Logo

Wie man WordPress Textauszüge mit the_excerpt individuell anpasst

Es gibt eine Reihe unterschiedlicher Möglichkeiten, wie man in WordPress Auszüge von Artikeln darstellen kann. Üblicherweise wird der Template-Tagthe_excerpt“ für diese Aufgabe eingesetzt. Auf Startseiten von Blogs, in Kategorieübersichten oder Archiven sorgt er dafür, dass Texte ohne wenn und aber nach 55 Wörtern gekappt werden und die Zeichen […] angehängt bekommen, um dem Leser zu signalisieren, dass es weitergeht. Dabei ignoriert diese Funktion gleich noch jegliche Formatierung und gibt Bildunterschriften schon mal als simplen Text aus.

Warum man der Funktion keine Parameter mitgeben kann, um beispielsweise die Anzahl der Wörter oder den „Weiterlesen“ Text anzupassen, bleibt wohl erst mal ein WordPress Mirakel. Aber zum Glück gibt es einige Möglichkeiten die Klippen von the_excerpt zu umschiffen.

Neue Filter in WordPress 2.9

Die aktuellste Möglichkeit stelle ich Ihnen gleich zuerst vor, auch wenn sie noch nicht nutzbar ist. In der kommenden WordPress Version wird es neue Filter für the_excerpt geben, die es ermöglichen, die Anzahl der Wörter und den „more“ Text anzupassen (also das […]). Dazu muss man nur wieder einmal ein Bisschen Code in die functions.php des verwendeten Themes schreiben:

Ich denke, die Filter sind soweit selbsterklärend. Die nun folgenden Varianten stehen bereits zur Verfügung und können mit der aktuellen Version von WordPress (und auch älteren Versionen) verwendet werden.

Das Feld „Auszug“ beim Schreiben von Artikeln verwenden

Eine der vielleicht am seltensten verwendeten Möglichkeiten von WordPress ist die Verwendung des manuellen Textauszugs. Indem man den gewünschten Auszug in das Feld „Auszug“ unterhalb der Textbox beim Schreiben eines Beitrags befüllt, kann man die Länge und das Aussehen des Auszugs kontrollieren. Im Gegensatz zum automatischen Auszug, werden hier nämlich auch Formatierungen (z.B. Fett) akzeptiert.

Umfangreichere Anpassungen mittels Funktion und Filter

Die vielleicht eleganteste, wenn auch nicht unbedingt die einfachste Variante ist die mittels Funktionen und Filter. Wir „bauen“ quasi die Standardfunktion nach und um. Dazu müssen wir erst mal die Funktion suchen, die normalerweise für the_excerpt zuständig ist. Wir finden sie in einer der sogenannten „Core“ Dateien. Also einer Datei, die zum Hauptprogrammcode von WordPress gehört. Die wollen wir natürlich nicht verändern (wäre aber auch möglich), weil diese Änderung beim nächsten Update von WordPress verloren wäre.

Also öffnen wir die Datei „wp-includes/formatting.php“ und suchen nach diesem Code:

function wp_trim_excerpt($text) { // Fakes an excerpt if needed
	global $post;
	if ( '' == $text ) {
		$text = get_the_content('');
		$text = apply_filters('the_content', $text);
		$text = str_replace(']]>', ']]>', $text);
		$text = strip_tags($text);
		$excerpt_length = 55;
		$words = explode(' ', $text, $excerpt_length + 1);
		if (count($words)> $excerpt_length) {
			array_pop($words);
			array_push($words, '[...]');
			$text = implode(' ', $words);
		}
	}
	return $text;
}

Diesen Code kopieren wir nun in unsere „functions.php“, die sich im Ordner unseres Themes befinden sollte.

Die Funktion, um die es uns geht heißt „wp_trim_excerpt“. Damit die neue Funktion auch funktioniert, müssen wir sie etwas umbenennen. Ansonsten hätten wir zwei Funktionen mit gleichem Namen und das würde WordPress (oder besser gesagt PHP) uns krumm nehmen und Fehler ausspucken. Nennen wir die Funktion nun also beispielsweise „custom_trim_excerpt“.

Die Anzahl der Wörter festlegen

Wie bereits gesagt, werden normalerweise 55 Wörter ausgegeben. Wir wollen aber nur 20 Wörter. Also ändern wir die folgende Codezeile:

$excerpt_length = 55;

wie folgt:

$excerpt_length = 20;

HTML Formatierungen behalten

the_excerpt „killt“ normalwerweise ja auch alle HTML Formatierungen. Wir wollen die aber behalten und unseren fett ausgezeichneten Text auch im Textauszug fett darstellen. Also ändern wir:

$text = strip_tags($text);

wodurch alle HTML Formatierungen entfernt werden und ergänzen:

$text = strip_tags($text, '');

Man kann soviele HTML Tags ergänzen, wie man will.

Damit haben wir unsere neue Funktion schon fertig. Nun müssen wir WordPress nur noch mitteilen, dass es die neue Funktion verwenden soll und nicht die reguläre Standardfunktion. Dazu tippt man folgenden Code ans Ende der functions.php:

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'custom_trim_excerpt');

Das war es auch schon. Ab jetzt wird WordPress die neue Funktion verwenden.

Der Template-Tag „the_content_rss“

Dieser Template-Tag ist eigentlich für diesen zweck gar nicht wirklich vorgesehen. Laut WordPress bewirkt er folgendes:

Zeigt den Inhalt des aktuellen Beitrags formatiert als RSS. Dieser Tag muss innerhalb des Loops aufgerufen werden.

Dieser Tag zeigt eine Vorschau des Beitrags mit einem „Weiterlesen“ Link, wenn der „more“ Tag benutzt wird.

Dennoch kann man ihn wunderbar zum Anzeigen von etwas flexibleren Textauszügen verwenden. Im BranfordMagazine verwende ich ihn beispielsweise zum Anzeigen der „Featured Article“ in der linken Spalte der Homepage. Hier wird der Textauszug auf 20 Wörter begrenzt.

Das Verwendungsschema im Ganzen:

Alle Details dazu gibt´s wie immer im WordPress Codex.

Plugins machen das Leben leichter

Natürlich gibt es auch wieder einige Plugins, mit denen man the_excerpt aufpeppen, oder ersetzen kann. Hier eine Auswahl:

Weitere unter dem Stichwort „excerpt“ abgelegte Plugins finden sich direkt bei WordPress.