WordPress-Funktion the_excerpt()
WordPress bietet dem Blogger die Möglichkeit an entsprechenden Stellen einen verkürzten Auszug eines Artikels auszugeben. Die geschieht mit der Template-Funktion the_excerpt, welche leider keine Parameter kennt und sich somit nicht ohne weiteres anpassen läßt. Da ich in meinem neuen Theme verstärkt von der excerpt-Funktion Gebrauch mache, störte mich die standardmäßige Verwendung der Zeichenkette […] als Kennzeichnung für das Ende des Artikelauszugs.
Wie immer gibt es natürlich als Lösung ein Plugin, in diesem Fall nennt es sich »The Excerpt Reloaded« und wurde von guff entwickelt. Das Plugin ist okay, jedoch stellte ich mir wieder mal die Frage, ob ich für eine kleine Anpassung ein ganzes Plugin installieren muß. Man kann eine ganze Menge dazu beitragen, daß WordPress nicht unnötig ausgebremst wird und ein guter Ansatz ist immer, nicht 35 Plugins einzusetzen. Also suchte ich die Funktion die für die Ausgabe des Excerpts zuständig ist und wurde in der Datei functions-formatting.php im Verzeichnis wp-includes fündig. In Zeile 711 beginnt die Funktion wp_trim_excerpt():
function wp_trim_excerpt($text) {
global $post;
if ( '' == $text ) {
$text = $post->post_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;
}
Der Rest ist simpel. Wir tauschen einfach in der Zeile:
array_push($words, '[...]');
die Zeichenkette […] gegen den von uns gewünschten Text aus. Ich wollte einfach nur drei Punkte (ohne eckige Klammern) an diese Stelle setzen. Um es ganz smart zu machen, verwendete ich dafür die HTML-Entity …. Wem die Länge des Excerpts nicht behagt, der kann auch gleich noch die Zeile:
$excerpt_length = 55;
dementsprechend anpassen. Es ist mir unverständlich, warum die WordPress-Entwickler nicht einfach die Funktion the_excerpt(länge, zeichenkette) definiert haben. Trotzdem zeigt sich wieder, daß nicht auf jeden kleinen Spatzen mit großen Plugin-Kanonen geschossen werden muß.
Die Excerpt-Funktion stellt übrigens standardmäßig nur den reinen Posting-Text dar. Bilder, Links usw. werden herausgefiltert. Wer sich hier mehr Flexibilität wünscht, kann zu oben genanntem Plugin greifen, die optimalste Variante bietet WordPress allerdings schon von Hause aus: den optionalen Auszug:

Die Möglichkeit des selbstdefinierten Excerpts im Admin-Panel.
Hier kann man den Text beliebig anpassen und auch Bilder, Links u.ä. verwenden.
Artikel: WordPress-Funktion the_excerpt()
Datum: Friday, 05. May 2006, 23:27 Uhr
Kategorien: WordPress
Feed zum Beitrag: RSS 2.0 · Trackback: Trackback-URL
Diesen Artikel kommentieren.
Journal (Artikel)
6. May 2006
@ 09:24
Naja, nicht jeder will in den Core-Dateien von WordPress was verändern … beim nächsten Update vergisst man das dann vielleicht und wundert sich, warum bestimmte Dinge jetzt nicht mehr funktionieren bzw. wieder ganz anders aussehen.
7. May 2006
@ 01:51
naja, allein die essentiell nötigen (besser: sinnvollen) plugins summieren sich schnell auf ein paar hände voll: ich nenn mal ein paar, die du vllt. noch nicht kennst:
um mal ein paar must-haves zu nennen. meist passt man die plugins ja eh nochmal an und das ist denke ich auch geschickter das in einem plugin zu machen… ob ein plugin gut geschrieben ist oder unnötige queries produziert ist wohl eher ein kriterium. wenn ein plugin gut geschrieben ist, macht es auch keinen ärger / wartezeit.
wenn ich mit der API besser zurecht käme bzw. es schneller ginge würde ich auch lieber ein plugin schreiben um ein kleines od. großes problem zu lösen anstatt an die includes oder admin-dateien hand anzulegen. das ist ja imho grad das schöne an wp und den plugins – hochladen und aktivieren. ist doch noch keine kanone ;) oder ?! :D
7. May 2006
@ 15:25
[...] My comprehension of German is a bit dodgy (haven’t been using it for quite some time), but what I could make in John’s post is that we need to change a bit of code in the file functions-formatting.php which you should find in the wp-includes folder of your Wordpress installation. What you need to do is to, in that file find the function wp_trim_excerpt():. [...]
8. May 2006
@ 01:31
@Martin – Ja, da hast Du natürlich recht. Ich hab eine kleine Liste in der ich vermerke welche Änderungen ich an welchen Dateien vorgenommen habe. Die functions-formatting.php hat sich zumindest seit V2.0 nicht geändert, afaik. Es ist sicher nicht für jeden praktikabel, es besteht aber weiterhin die Alternative des »Optionaler Auszugs«. Zumindest davon scheint nicht viel Gebrauch gemacht zu werden wenn man sich so in WordPress-Blogs umschaut.
@Erik – Danke für die Liste. Ein paar kenne ich in der Tat noch nicht, das mit den »keyword values« könnte interessant sein. Ich denke aber nicht, daß alle »must haves« sind, denn die Template-Tags sind so flexibel, daß z.B. verschiedene Varianten der Posting-Ausgabe gar kein Problem sind (im neuen Theme hab ich recht stark davon Gebrauch gemacht). Es kommt immer darauf an, wie stark man sich in die Materie vertieft… ;-)
15. May 2006
@ 14:12
Danke für den Tipp!
6. October 2006
@ 01:24
[...] Der er mulighed for kun at vise et uddrag af en post i Wordpress. Men: funktionen the_excerpt() kan ikke rigtigt tilpasses. F.eks. afsluttes de viste uddrag ganske simpelt med […] :-( Chris J. Davis viser i sin weblog et par funktioner der klarer sagen Custom Excerpts for WordPress, men ikke lige som jeg vil ha’ det. John Wrana peger på et plugin som laver excerpts med alle mulige parametre: the_excerpt_reloaded, men giver også en idé til et hurtigt hack: Åben filen functions-formatting.php (ligger i wp-includes mappen), find funktionen wp_trim_excerpt():og tilpas linien array_push($words, ‘[...]’); [...]
27. December 2006
@ 14:00
Hallo,
ich würde gerne dem [...] gleich den Link zum Artikel mitgeben, was auch klappen würde, wenn ich nur die richtige Variable rausfinden würde. Also array_push($words, ‘[...]‘);
den String für the_permalink bzw. den Titel bräuchte ich.
Wo oder wie finde ich den raus?
Danke für Hilfe!
31. December 2006
@ 03:11
Um das [...] loszuwerden: Was spricht gegen diese Lösung im theme template bei der Ausgabe:
@$xcrpt= str_replace(“[...]”, “”, get_the_excerpt());@
um gleich den Link mitzugeben könnte man dann noch ausgeben mit sowas:
print($xcrpt.'<a href="'get_permalink().'" rel="nofollow">Mehr...</a>');Grüße und gut gerutschtes Neujahr
Helli
31. December 2006
@ 03:14
Cool, hätte nicht gedacht, dass das html so übernommen wird, also nochmal das print statement:
print($xcrpt.'<a href="'.get_permalink().'" rel="nofollow">Weiterlesen...</a>');
Helli
31. December 2006
@ 03:21
Guenter, möglich wäre z.B. diese Variante:
array_push($words, '(<a href=''. get_permalink($post_ID).'' rel="nofollow">[...]</a>)');Nicht getestet, sollte aber funktionieren.
Helli, das ist auch eine Möglichkeit, allerdings darf man dann nicht die Zeichenkette [...] in sonstiger Form verwenden, wie ich das z.B. in meinem neuesten Beitrag gemacht habe, sonst wird die auch ersetzt. ;-) Man müßte dann also auch noch abfragen, ob es sich um das Ende des Strings handelt. Aber eine Möglichkeit ist es natürlich auch.
Guten Rutsch! =)
John
1. February 2007
@ 00:48
Sehr nette Hilfe, gleich mal für meine “Suche” so angepasst. Ist in der 2.1er ja genau so (bis auf den Dateinamen..).
Danke ;-)
8. June 2007
@ 01:28
[...] Dank geht an Jowra, moshu und das Team von [...]
30. June 2007
@ 21:03
Great Job!
29. July 2007
@ 10:43
@john
wenn ich das so mache wie du es schreibst erhalten ich folgenden Fehler:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/webxx/html/wp-includes/formatting.php on line 790
7. August 2007
@ 23:10
“Um das [...] loszuwerden: Was spricht gegen diese Lösung im theme template bei der Ausgabe:
@$xcrpt= str_replace(“[...]”, “”, get_the_excerpt());@
um gleich den Link mitzugeben könnte man dann noch ausgeben mit sowas:
print($xcrpt.’Mehr…‘);”
Klingt gut und trifft den Nagel auf den Kopf. Nur leider haperts an der Umsetzung. Hat jeman nen Tipp, wie das genau gemeint ist??
26. January 2008
@ 13:08
[...] Sicht etwas brachiale – Methode möchte ich nur der Vollständigkeit halber hinweisen. Auf Jowra.com wird auf die Möglichkeit hingewiesen, die Standardeinstellungn in den WordPress Core Dateien [...]
22. February 2008
@ 12:20
Funktioniert super.
array_push($words, '<a href="'. get_permalink($post_ID).'">[...]</a>');. Allerdings nur wenn manals im Html einfügt. Muss mir nur irgendwann mal merken, die Datei beim updaten nicht zu überschreiben.31. March 2008
@ 20:28
grandioser artikel, thanks for that one. gibts ne möglichkeit einfach eine bestimmte anzahl von zeichen auszugeben? wörter haben ja unter umständen durchaus unterschiedliche zeichenlängen ;)
4. June 2008
@ 18:19
Herzlichen Dank dafür, habe ewig danach gesucht und nichts gefunden.
Allerdings solltest du kurz Deinen Artikel updaten, inzwischen liegt die Funktion nämlich nicht mehr in functions-formatting.php sondern in formatting.php ab Zeile 839ff
Viele Grüße
Oliver
7. July 2008
@ 02:04
Hi! Danke für den Tipp, aber der Link zum Plugin ist nicht richtig. Der erste Strich im Namen ist in Wirklichkeit ein Unterstrich.
Das ist die korrekte URL: http://guff.szub.net/2005/02/26/the_excerpt-reloaded/
Gute Nacht :)