WordPress: Auszug mit bestimmter Zeichenzahl
17.01.2010 in: PHP, Webdesign, Wordpress und Zeichen
Die Template-Funktion the_excerpt() kann in der Menge der auszugebenden Worte gesteuert werden. Brauchen wir aber eine feste Zeichenzahl, so müssen wir ein bißchen tricksen.
Für einen Kunden, der in drei Sprachen bloggt und bei gleicher Wortmenge oft sehr unterschiedlich lange Auszüge produziert, habe ich einmal diese Extrafunktion geschrieben:
/**
* 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);
$out = end_on_word($out) . ' …';
$out = xwp_autop($out);
if ( $echo )
{
echo $out;
return;
}
return $out;
}
/**
* 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;
}
Diese beiden Funktionen kommen mitsamt der Funktion end_on_word() in die functions.php.
Im Template wird die Funktion dann anstatt des the_excerpt() benutzt:
// Die ersten 200 Zeichen excerpt_chars(200);
Ich verstehe das Problem nicht so ganz. Würde es nicht reichen,
the_excerptmitsubstrzu kürzen? Ich begreife die umständliche Funktion nicht.Anscheinend versuchst du mit der zweiten Funktion, Newlines in
<br>-Tags umzuwandeln. Würde danl2brnicht ausreichen?@[asterix]:
the_excerpt()kann HTML-Elemente enthalten, wenn das Feld separat befüllt wurde. Da die also ohnehin herausgekürzt werden müssen, umgehe ich die Funktionthe_excerpt()komplett. Spart einfach Zeit, und ich bin eventuell später eingeführten Änderungen im Core nicht ausgeliefert.Die zweite Funktion erzeugt auch Absätze (
<p>); das macht nl2br() nicht.