post

Links aus einem Artikel filtern und am ende Ausgeben

Aug 6, 2012

Heute habe ich bei wpde.org eine Frage nach einem „Artikel-link-Crawler“ gelesen. Darunter konnte ich mir erst nicht viel vorstellen. Zur Erklärung, gesucht wurde die Möglichkeit alle im Artikel befindlichen Links heraus zu filtern und am ende des Artikels aus zu geben. Ganz ähnlich findet dies auch bei Wikipedia statt, sobald man eine Quelle zu einer Aussage angibt wird diese am ende der Webseite angezeigt. Nun gut und schön, wer diese Funktion benötigt sucht vergebens, jedoch jetzt nicht mehr. Ich habe mich diesem Problem angenommen und einen kleinen Codeschnipsel dazu verfasst welcher genau das tut was gesucht wurde.

Einfügen in die functions.php des WordPress Themes:

function get_post_urls($content) {
    if( preg_match_all("#((https?://|ftp://|www\.|[^\s:=]+@www\.).*?[a-z_\/0-9\-\#=&])(?=(\.|,|;|\?|\!)?(\"|'|«|»|\[|\s|\r|\n|$))#iS", $content, $url) ) {
        $ausgabe = '<h3>Links zum Artikel</h3>';
        $ausgabe .= '<ul>';
        foreach ($url[0] as $url) {
            $ausgabe .= '<li>'.$url.'</li>';
        }
        $ausgabe .= '<ul>';

        return $content.$ausgabe;
    } else {
        return $content;
    }
}
add_filter('the_content', 'get_post_urls');

Die Schwierigkeit hierbei ist es die URL’s korrekt zu erkennen. Das Suchmuster muss hierzu sehr komplex aufgebaut sein um möglichst wenig fehler zu zu lassen. Wie umfangreich solche suchmuster werden können zeigt der Artikel „In search of the perfect URL validation regex„. Hier findet man Suchmuster von 38 Zeichen bis hin zu 969 Zeichen welche auf den Prüfstand geschickt wurden.


Kreativmonkey