geschrieben von Micha am 10. Dezember 2009 | kein Kommentar

WordPress 2.9 erlaubt es, per Filter auf den excerpt more String und auf die Länge des excerpt Einfluß zu nehmen. Wenn man aber mehrere excerpt Längen für unterschiedliche Templates braucht, was dann?
Mal angenommen, wir brauchen einmal einen excerpt mit 30 Worten und einmal mit 45 Worten sowie “…” als more String.
Dazu schreiben wir zuerst die Filterfunktionen mit den benötigten Werten.
function wpe_excerptlenght_teaser($lenght) {
return 45;
}
function wpe_excerptlenght_index($lenght) {
return 30;
}
function wpe_excerptmore($more) {
return '...';
}
Jetzt kommt die neue excerpt Funktion.
function wpe_excerpt($lenght_callback='', $more_callback='') {
global $post;
if(function_exists($lenght_callback)){
add_filter('excerpt_length', $lenght_callback);
}
if(function_exists($more_callback)){
add_filter('excerpt_more', $more_callback);
}
$output = get_the_excerpt();
$output = apply_filters('wptexturize', $output);
$output = apply_filters('convert_chars', $output);
$output = '<p>'.$output.'</p>';
echo $output;
}
Dieser Funktion werden die beiden Filterfunktionen mitgegeben. Es wird gepüft, ob diese Funtionen vorhanden sind und wenn ja, wir der Filter angewandt. Gibt es die lenght Funktion nicht, wendet WordPress den Standardwert von 55 Worten an. Danach wird der excerpt geholt. Anschließed werden weitere Filter angewandt (siehe default_filters.php). Den Filter convert_smilies habe ich nicht verwendet, er geht bei automatischem excerpt eh nicht und wpautop mag ich persönlich nicht, da es zu unvorhersehbaren Resultaten kommt, gerade bei Listen oder Code. Darum wrappe ich den Output mit einem Paragraph.
Jetzt benötigen wir noch die Funktion im Template.
<?php wpe_excerpt('wpe_excerptlenght_index', 'wpe_excerptmore'); ?>
// the other one
<?php wpe_excerpt('wpe_excerptlenght_teaser', 'wpe_excerptmore'); ?>
Jetzt macht es aber keinen Sinn, für jeden Wert von 1-55 eine Filterfunktion zu schreiben
, aber für 2-3 unterschiedliche Werte in verschiedenen Sichten ist die Lösung brauchbar.
Das ist die 10. Tür des WPEngineer Advent Calendar.