WordPress ist ja recht bekannt für eine umfassende Plugin-Sammlung, viele verschiedene Möglichkeiten zur Personalisierung der eigenen Webseite, sowie einer wirklich kinderleichten Bedienung. Sowohl aus Eigeninteresse als auch wegen einer Anfrage seitens anderen WordPress-User, habe ich mich ein wenig mit dem Umschreiben von ausgehenden Links beschäftigt.
Das Ziel:
Ausgehende Links in Artikel sollen über eine Leaving-Page umgeleitet werden, damit der Nutzer erfährt, dass er die aktuelle Webseite verlässt. Im Feed soll dieses Verhalten nicht auftreten, da man beim Lesen des Feeds meistens nicht auf der Webseite ist und dies daher (zumindest für mich) überflüssig erscheint.
Die Vorteile einer solchen dynamischen Variante sollten klar sein:
Man muss den Inhalt nicht direkt in der Datenbank ändern und ist daher sehr flexibel, wenn man später wieder ohne einen solchen Filter auskommen möchte. Alle Links bleiben vollständig in der Datenbank beibehalten – ohne irgendwelchen künstlichen Veränderungen.
Nun gibt es zwar einige Plugins für Redirects, aber keines wollte so wirklich überzeugen. Entweder waren diese komplett “aufgebläht” oder schlichtweg nicht für einen solchen Einsatz vorgesehen. Daher habe ich mich selber damit beschäftigt und ein wenig rumprobiert, bis ich schließlich eine halbwegs nutzbare Lösung entwickelt hatte. Es handelt sich um ein Filter Hook für die functions.php, des jeweiligen WordPress Themes.
Das Script ist jedoch jetzt nicht variabel, sondern benötigt eine manuelle Anpassung der Hauptdomain beim Regex und den Replace-Strings.
[php]
/* redirect outgoing links to your leaving-page */
function url_content_filter($content) {
// dont apply on feeds
if(!is_feed()) {</code>
// regex to fetch outgoing links
$regex =’/href="(http|https):\/\/(?!yakuza112\.org)[^"]+"/‘;
// replace criteria
$old = ‚href="‘;
$new = ‚href="https://yakuza112.org/out/go.php?to=‘;
// get all matching links from content
preg_match_all($regex, $content, $treffer, PREG_SET_ORDER);
// replace
foreach($treffer as &$val) {
$amp=str_replace($old, $new, $val);
$content=str_replace($val, $amp, $content);
}
}
return $content;
}
/* apply filter to redirect outgoing links to your leaving page */
add_filter(‚the_content‘, ‚url_content_filter‘, “, ‚1‘);
[/php]
Funktionsweise:
Hierbei wird zuerst der Content (Inhalt des Artikels) per Regex auf URLs überprüft, welche nicht mit der eigenen Domain anfangen (hier: yakuza112.org). Es werden alle URLs gefunden, welche nicht auf die eigene Webseite verweisen. Anschließend wird vor jedem href die Leaving-Page geschaltet, so dass alle ausgehenden Links umgeschrieben werden. Der obige Quellcode funktioniert nur für den Content und nicht für die Kommentare, wobei man das recht einfach nachrüsten kann.
Hinweis:
Sub-Domains werden aktuell noch ignoriert und auch als “fremde” Seiten identifiziert.