Artikel vom 18. Februar 2010
Interne Links in WordPress-Beiträgen zukunftssicher setzen
Das Einfügen von Verlinkungen in den verfassten Beitragstext gestaltet WordPress mehr als komfortabel: Mit Copy & Paste der Internet-Adresse ist das Vorhaben prompt und wirkungsvoll erledigt. Bei Projekten im jungen Stadium des Fortschritts wird erfahrungsgemäß rege und gern experimentiert, optimiert und modifiziert. Im Verlauf der Abstimmung kommt es daher meist zu textlichen Änderungen im Titel und dem Inhalt der Artikel. Aber auch bei Permalinks kann sich die Struktur und die Zusammensetzung jederzeit erneuern – Unordnung ist vorprogrammiert.

Zuweisung eines Links in WordPress
Dynamisches Konzept für Permalinks
Um die bereits gesetzten, aber im Laufe der Website-Entwicklung umgeformten Links nicht per Hand korrigieren bzw. migrieren zu müssen, werden Verknüpfungen zwischen den internen Blogseiten mithilfe eines simplen Shortcode gesetzt und mit jeweiliger ID angesprochen. Die Zweckmäßigkeit der Lösung: Die Artikel-ID bleibt für immer konstant, kann als Referenz der gelinkten Seite also sorglos verwendet werden – der Hyperlink wird anhand der ID dynamisch ermittelt und ist immer auf dem aktuellsten Stand. Ohne Weiterleitungen, ohne zusätzliche Plugins.
Erweiterung der functions.php im aktuellen Theme
add_shortcode(
'post',
create_function(
'$atts, $data',
'return "<a href=\"" .get_permalink($atts[id]). "\" title=\"" .esc_attr(strip_tags(get_the_title($atts[id]))). "\">" .$data. "</a>";'
)
);
Mögliche Anwendung im Beitrag
... Text [post id=9]Verlinkter Blogartikel[/post] Text ...
Nennenswerte Vorteile
- Link (href) und Titel (title) stets up-to-date, da dynamisch geladen.
- Keine Migration oder Anpassungen bei URL-Änderung notwendig.
- Empfehlenswert für kleine bis mittelgroße Websites mit WordPress als CMS.
- Funktioniert bei Beiträgen, statischen Seiten und Anhängen.
Nachteile des Shortcodes
- Erzeugt zwei zusätzliche Datenbankabfragen, da Werte neu gelesen werden.
- Umständlich, da die Ziel-ID gefunden und händisch eingefügt werden muss.
- Bei der Entfernung des Codes bleiben Shortcode-Einträge sichtbar zurück.
- Keine interne Benachrichtigung via Pingback.
Voraussetzungen
- WordPress 2.8
Andere Route zum Ziel?
Als Alternative zum vorgestellten Ansatz wären relative Pfadangaben beim Verlinken der Beiträge durchaus denkbar – nach einem Blogumzug bliebe zumindest die Suchen-Ersetzen-Prozedur auf der Datenbankebene erspart, da sonst die alte Domain im Pfad durch die neue getauscht werden müsste. Wird jedoch die Gliederung der URL im Laufe der Zeit nachträglich korrigiert, so kommt man als Blogger nicht drumherum, “hart” gesetzte Links aufwendig zu aktualisieren. Des Weiteren kommen die meisten Feedreader mit relativen Angaben der Links im Artikelinhalt nicht klar – Contra für die Relativität also.
Fazit
Zusammenfasend lässt sich festhalten, dass die angesprochene Methode zwar geringfügig umständlicher, “hungriger” als die von WordPress mitgelieferte Technik ist, dafür aber effizient. Mit einer gesunden Portion Selbstdisziplin kann auf diesem Weg ein internes, pflegeleichtes und vor allen Dingen stabiles Linknetzwerk aufgebaut werden. Ohne Fleiß kein Preis.
P.S.
Übrigens verfolgt Michael Oeser in seinem How-To einen identischen Ansatz.
[Der Autor] Sergej Müller ist enthusiastischer Software Engineer mit Schwerpunkten Webentwicklung und WordPress. Seit 2007 programmiert und vertreibt er wpSEO, das weltberühmte und patentierte SEO-Plugin für WordPress-Blogs.
Twitter und Bit.ly in WordPress: Plugin wpTwitBox 0.5 freigegeben
Antispam Bee und AntiVirus für WordPress mit eigenen Websites
25 Kommentare zum Artikel
Toll, werde das gerade auf meinem noch jungen Blog ausprobieren.
Sehr cool! Besonders dass der Title auch noch mitabgerufen wird, gefällt mir außerordentlich gut! Bisher habe ich immer mit dem “Broken Link Checker”-Plugin experimentiert, aber das war mir eigentlich zu Performance-fressend.
Und da ich hier vorher noch nie kommentiert habe, auch ein generelles Dankeschön für Deine vielen informativen Beiträge zu WordPress! Ohne Leute wie Dich wäre das System wahrscheinlich nur halb so erfolgreich, weil die Mehrheit zu faul ist, solche Lösungen zu erarbeiten (und dann zu Teilen). :-D
@Matthias
Mache ich sehr gerne. Solange die Zeit und die Motivation es hergeben.
Ist das nicht genau das, was das Plugin cross-references macht?
@tux
Vielleicht, kenne das Plugin nicht. Nicht ausgeschlossen, denn es gibt Plugins für jede Angelegenheit. Meinem Code schenke mehr Vertrauen ;)
Ah. Hätte ja sein können. :-) Kam mir jedenfalls bekannt vor.
Der Nachteil bei den relativen Links: Wenn man den Beitrag im Newsreader liest und der Absender Feedburner benutzt, funktionieren die nicht mehr. Diese Methode sollte man also mit einem Filter auf den Feedcontent ergänzen, der absolute URLs erzeugt.
get_permalink() ist ja eine eher “teure” Funktion. Denkst du nicht, es wäre sinnvoll, die Permalinks für den Shortcode in einem WP_Object_Cache-Objekt oder zumindest in einem statischen Array zu halten?
@tux
Hab mir das von dir genannte Plugin angeschaut, das ist deutlich umfangreicher und beinhaltet zig SQL-Abfragen.
@Thomas Scholz
Stimmt, an den Feedreader hatte ich dem Moment nicht gedacht. Werde den Beitrag um diese Gefahr erweitern.
@Robert
Gebe ich dir absolut Recht, allerdings wäre dann die Lösung nicht mehr smart wie aktuell. Da müsste man abwiegen, wie umfangreich das Projekt ist, wie hoch die Zugriffszahlen sind und wie oft interne Links innerhalb einer Seite gesetzt werden. Erst dann könnte man überlegen, ob das Caching sinnvoller ist. Vielleicht eine Idee für ein effizientes Plugin, welches diese Aufgabe zuverlässig übernimmt.
@all
Danke für eure Kommentare und Meinungen.
@Sergej
Klasse, vielen Dank! Bisher habe ich mir mit einem Filter geholfen, aber mit dem Shortcode ist’s viel eleganter.
Ich habe noch einen Vorschlag:
Analog zur WordPress-Funktion ‘the_title_attribute’ solltest Du ‘get_the_title’ noch mit ‘esc_attr’ und ‘strip_tags’ umschließen.
Das ist hilfreich, wenn der Titel Anführungszeichen oder Tags enthält.
@Peter Claus
Berechtigter Einwand. Ich hatte die bereits bereinigte Ausgabe von the_title_attribute im Kopf, bin auch hier davon ausgegangen. Wertvoller Tipp, merci.
WP 2.5 sollte wohl jeder haben. Was genau sind hier Shortcodes? Und wenn mein Theme keine functions.php hat?!
@Marie
Shortcodes sind Markierungen oder auch Platzhalter innerhalb eines Artikels, die durch dynamisch erzeugte Daten ersetzt werden können.
Wenn dein Theme keine functions.php hat, dann legst du diese einfach ein und fügst den obigen Code zwischen <?php und ?> ein.
Was für einen Sinn haben Permalinks, wenn sie nicht permanent sind?
@KingOli
Diese bleiben permanent, allerdings erst nach einer Feinjustierung der Struktur und Zusammensetzung. Such mal im Artikel nach dem Begriff “Blogumzug”, spätestens dann ist deine Frage beantwortet.
Die Systemvoraussetzungen habe ich von WordPress 2.5 auf WordPress 2.8 hochgeschraubt, da die hinzugekommene Funktion esc_attr erst ab da unterstützt wird. Man könnte zwar abwärtskompatibel arbeiten, aber die Abfrage lohnt sich einfach nicht bei so einem winzigen Aufruf.
Vielen Dank! Hatte eine ähnliche Lösung im Auge, aber Dein Code ist schlanker. ;) Und für so eine einfache Funktion ein ganzes Plugin zu installieren, wäre sowieso nicht meine Sache.
Sehr praktisch und läuft sogar bei mir als nicht-programmierer! Einfach, verständlich und vor allem sehr praktisch!
Vielen Dank für den Tipp mit den Shortcodes. Der Mehraufwand beim Verlinken ist eigentlich ziemlich gering, und man spart sich wirklich eine Menge Aufwand, wenn man die Links nicht nach jeder Umstellung im Blog neu ändern muss. Da ich mich in WordPress erst noch einarbeiten muss, bin ich immer froh, wenn ich nützliche Ratschläge wie diesen finde. Ich werde das nachher gleich mal ausprobieren.
Wo genau ist denn nun der Unterschied zu der Funktionsweise von “Michael Oeser” und dessen Code-Beispiel (was mir eher zusagt)??
Vergleich einfach den Code, dann wird dir eigenes klar. Aber wenn dir dein Bauchgefühl sowieso was anderes murmelt, dann verlass dich doch drauf ;)
Code vergleichen, das bringt bei mir nichts, bin kein Programmierer oder dergleichen. Versuch und Fehler, das ist mein Vorgehen. ;-)
Ich sag mal so: Viele Wege führen nach Rom. Mein Ansatz ist kompakter und WordPress-konformer, da mit dem Title-Attribut etc.
Schöner Blog!
Lese dazu auf meinem Blog:
Interne Links: Schaffung einer Infrastruktur aus kontextbezogenen Links
Gruß
Lars
Ich denke das Thema ist sehr gut gewählt und für so gut wie alle Blogger sehr Wichtig. Vielen Dank für den Tipp mit den Shortcodes.
2 Verlinkungen auf den Artikel
› t3n-Linktipps: HTML5 statt Gears, Twitter-Phishing, WP-Links, We [...]
› Links in a CMS Wordpress « Lenfis bLog