Für eine Zeichenzahl kommst du mit den Filtern noch nicht sehr weit. Ich habe mal für einen Kunden dieses geschrieben:
PHP
/**
* Erzeugt einen Auszug mit genau definierter Zeichenzahl.
*
* @param int $chars Menge der Zeichen.
* @param bool $echo Aus- oder Rückgabe
* @return string
*/
function excerpt_chars($chars = 100, $echo = TRUE)
{
global $post;
$out = strip_tags($post->post_content);
$out = substr($out, 0, (int) $chars);
/* Das Leerzeichen ist ein & #160; (ohne Leerzeichen
* hinter dem &), aber die Forensoftware zerstört das
* leider. */
$out = end_on_word($out) . ' …';
$out = xwp_autop($out);
if ( $echo )
{
echo $out;
return;
}
return $out;
}
/**
* Entfernt unvollständige Worte am Ende eines Strings.
*
* @author Thomas Scholz <http://toscho.de>
* @see http://toscho.de/2009/php-funktion-end_on_word/
* @param $str Zeichenkette
* @return string
*/
function end_on_word($str)
{
$str = trim($str);
// Nur ein Wort, wird also nicht gekürzt.
if ( FALSE === strpos($str, ' ') )
{
return $str;
}
// Jedes Wort ein Eintrag im Array …
$arr = explode(' ', $str);
// … letztes Stück wegwerfen …
array_pop($arr);
// … den String wieder herstellen und Kommas trimmen.
return rtrim( implode(' ', $arr), ',;');
}
/**
* Wandelt Zeilenumbrüche in HTML-Code.
* wpautop() ist hier nicht nötig
* @source http://photomatt.net/scripts/autop
* @param string $pee zu formatierender String
* @param bool $br
* @return string
*/
function xwp_autop($pee, $br=1)
{
// cross-platform newlines
$pee = preg_replace("/(\r\n|\n|\r)/", "\n", $pee);
// take care of duplicates
$pee = preg_replace("/\n\n+/", "\n\n", $pee);
// make paragraphs, including one at the end
$pee = preg_replace('/\n?(.+?)(\n\n|\z)/s', "<p>$1</p>\n", $pee);
// optionally make line breaks
if ($br) $pee = preg_replace('|(?<!</p>)\s*\n|', "<br />\n", $pee);
return $pee;
}
Alles anzeigen
Dieser Code kommt in die [FONT="Courier New"]functions.php[/FONT].
Wenn du jetzt im Loop statt [FONT="Courier New"]the_excerpt();[/FONT] schreibst:
… dann werden ungefähr die letzten 200 Zeichen ausgegeben.
Das ist natürlich viel Aufwand für eine so marginale Änderung. In dem von mir betreuten Fall wurde das Blog in drei Sprachen geführt; die Länge des Exzerptes variierte daher bei gleicher Wortzahl sehr stark. Bei einem Blog in nur einer Sprache würde ich nicht so viel Wind machen.
Gruß
Thomas