Content von WordPress RSS Blog-Feeds kürzen


Ein einfaches Plugin um die RSS-Feeds vom eingenem Blog zu kürzen

Es gibt unterschiedliche Möglichkeiten, die von einem WordPress Blog zur Verfügung gestellten werden, um einen RSS Feeds zu kürzen. Die einfachste Möglichkeit ist, im Dashboard von WordPress die Option Kurzfassung für das Anzeigen von Feeds auszuwählen:

Dashboard -> Einstellungen -> Lesen -> Zeige im Newsfeed -> Kurzfassung

Autoren, denen der für Feeds generierte Text dann immer noch zu lang erscheinen sollte, können eine eigene Funktion zum Kürzen der Feeds oder ein entsprechendes Plugin verwenden.

Bei dem in diesem Beitrag vorgestellten Code (getestet mit Twenty Twelve) handelt es sich um eine Variante, die entweder als Plugin unter /wp-content/plugins/ abgespeichert werden kann, oder aber ohne den einleitenden Kommentar in der Datei funktions.php, die sich in dem vom  Theme verwendeten Verzeichnis befinden sollte. Die Einstellung der gewünschten Länge erfolgt mit der Angabe des Wertes von $min, im Beispiel 160 Zeichen. Der Wert von $max sollte hingegen nicht wesentlich veränderten werden.

Was bewirkt dieser Code?

Zuerst werden im Text enthaltende Tags entfernt. Bei einfachen HTML-Tags, die im Ursprungstext nur zur Formatierung dienen, mag dies noch nicht unbedingt erforderlich scheinen, bei eingebetteten JavaScripts Codes oder Code-Listings (wie auf dieser Seite) hingegen schon. In einem zweiten Schritt werden längere Abschnitte mit Whitespace, die erst durch die Entfernung von eingebettetem Code oder von HTML-Tags entstanden, wieder entfernt.
Nach der Bereinigung des Textes wird die Anzahl der im String enthaltenen Zeichen gezählt und wenn der Text mehr Zeichen als bei $min als Wert angegeben wurde enthält, mit strpos nach dem nächsten Leerzeichen hinter $min gesucht.

Beispiel: Angenommen die Variable $min enthält als Vorgabewert 160 und bei 167 wurde ein Leerzeichen gefunden, so wird der Text bis zu diesem Leerzeichen gekürzt. Nur für den Fall das auch bis 160 + 40 kein Leerzeichen gefunden wird (was bei normalen Wörtern praktisch nicht vorkommen kann), so wird noch einmal nachgefragt, ob das Ende des Strings vor 200 Zeichen erreicht wird oder anderenfalls mitten in einem Word gekürzt. Dieses “Wort” müsste dann theoretisch mindestens 40 Zeichen lang sein und derartige Gebilde kommen eigentlich nur bei gestrichelten Linien und ähnlichen Gebilden vor.

<?php
/*--------------------------------------------------------------------------------------------
 Plugin Name: Feed-Kürzer
 Plugin URI:  http://www.coder-welten.com/content-von-blog-feeds-kuerzen/
 Description: Ein einfaches Plugin um die eigenen RSS-Feeds zu kürzen, welches nur aktiviert zu werden braucht.
 Author:      Horst Müller
 Version:     1.00
----------------------------------------------------------------------------------------------
*/
function kuerzeFeed($content) {

    $min = 160;
    $max = $min +40;

    /* Lösche alle Script- und HTML-Tags aus dem Text */
    $content = preg_replace("/<.*?>/is" , "", $content);
    $content = preg_replace("/\s{2,}/is", "", $content);

    /* Zähle ob der Text mindestens 160 Zeichen hat, falls nicht gebe mit Else aus. */
    if (strlen($content) > $min){

        /* Suche ab Position 160 nach einem Leerzeichen */
        $laenge = strpos($content, " ", $min);
        /*
        Nehme diese Position bis zum gefundenen Leerzeichen als neue Länge,
        falls strpos nicht false meldete.
        */
        if ($laenge !== false){
            $gekuerzt = substr($content, 0, $laenge)." [...]";
        }
        /*
        Frage noch einmal nach, wieso kein Leerzeichen gefunden wurde, obwohl der
        $content länger als 160 Zeichen und übernehme bis 200 Zeichen ungekürzt.
        */
        elseif (strlen($content) <= $max) {
            $gekuerzt = $content;
        }
        /*
        Falls zwischen zwischen 160 und 200 kein Leerzeichen gefunden wurde,
        dann trenne den Rest über 200 einfach so.
        */
        else {
            $gekuerzt = substr($content, 0, $min)." [...]";
        }
    }
    else {$gekuerzt = $content;
    }
    return $gekuerzt;
}

/*--------------------------------------------------------------------------------------------
 Verwende the_content_feed für <description> und the_excerpt_rss für <content:encoded>
----------------------------------------------------------------------------------------------
*/
add_filter("the_content_feed", "kuerzeFeed");
add_filter("the_excerpt_rss",  "kuerzeFeed");

?>

Die Einbindung erfolgt entweder als Plugin oder durch Übernahme in die functions.php des Theme, wobei dann der Kommentar entsprechend angepasst werden sollte.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *