Morgen geht es für mich sehr früh in den wohlverdienten Weihnachtsurlaub. Daher musste ich mir für heute Abend noch ein Thema raussuchen, damit ihr nicht auf euren Adventskalenderartikel verzichten müsst. Aber woher bekommt man als Entwickler mal eben schnell ein schönes und kurzes Thema her? Richtig, aus dem eigenen Code. Und so möchte ich euch heute drei kleine Code-Snippets präsentieren, mit denen ich die Kommentare hier im Blog verbessere.
Shortcodes im Kommentar erlauben
Mein Blog ist ja sehr codelastig. Nicht selten kommt es also vor, dass auch in einem Kommentar Quellcode verwendet wird. Damit dieser ebenso hübsch aussieht wie hier im Beitrag, habe ich die Shortcodes des Syntaxhighlighter Plugins auch für Kommentar erlaubt. Ermöglicht wird das mit nur einer einzelnen Zeile Code:
add_filter( 'comment_text', 'do_shortcode' );
Da aber die meisten Leute, die einen Kommentar hinterlassen, von diesem Feature nichts wissen, muss ich aktuell die Kommentare immer nacharbeiten. Vielleicht finde ich dazu ja noch eine bessere Lösung 😉
Nachtrag: Dass diese pauschale Aktivierung von Shortcodes durchaus gefährlich sein kann, war mir durchaus bewusst. Ich konnte nur keinen expliziten Fall konstruieren. Aber Bego hat in seinem Kommentar mal ein solches Beispiel gegeben. Ihr solltet also entscheiden, ob es für euch eventuell gefährlich sein könnte, bevor ihr die Funktion aktiviert.
Links in Codeblöcken ignorieren
Direkt nachdem ich das tolle neue Feature aktiviert hatte, gab es ein riesiges Problem. Sämtliche URLs in den Code-Blöcken wurden plötzliche anklickbar. Entsprechend hat man dann an diesen Stellen den HTML-Code des automatisch generierten Links gesehen. Um dies zu lösen, habe ich eine kleine Zusatzfunktion geschrieben, die die automatische Verlinkung unterbindet, wenn der Kommentar einen Codeblock enthält:
function fix_syntaxhighlighter_comment_text_link( $comment ) { if ( false !== strpos( $comment, 'class="brush:' ) ) { remove_filter( 'comment_text', 'make_clickable', 9 ); } else { add_filter( 'comment_text', 'make_clickable', 9 ); } return $comment; } add_filter( 'comment_text', 'fix_syntaxhighlighter_comment_text_link', 8 );
Der einzige Nachteil ist, dass nicht nur die Links in den Codeblöcken nicht mehr automatisch zu Links werden, sondern alle Links im Kommentar. Aber da ich ja solche Kommentare ohnehin überarbeite, kann ich das dann auch gleich anpassen.
Alle Links auf „dofollow“
Vielleicht werden jetzt einige von euch denken: ??? Aber nicht nur zur Weihnachtszeit bin ich gerne sehr großzügig und daher sind bei mir alle Links in den Kommentaren, ja auch der Link hinter dem Namen auf dofollow gesetzt. Und das schon seit vielen Jahren. Gelöst habe ich das mit diesem kleinen Codeschnipsel:
function follow_comment_link( $link ) { return str_replace( array( "rel='external nofollow'", 'rel="nofollow"' ), array( "rel='external'", ''), $link ); } add_filter( 'get_comment_author_link', 'follow_comment_link' ); add_filter( 'comment_text', 'follow_comment_link' );
Ich freue mich wirklich sehr über jeden Kommentar, der auf meinem Blog hinterlassen wird. Selbst über die, die nur meine Rechtschreibfehler bemängeln 😉 Und daher mache ich aus Überzeugung alle Links dofollow.
Fazit
Auch mit solchen kleinen Dingen kann man die Qualität der Kommentartexte ein wenig Verbessern. Für die Inhalte seid jetzt natürlich ihr verantwortlich. Vielleicht wollt ihr ja mal eure Code-Snippets teilen und dabei einen der Shortcode des SyntaxHighlighter Evolved Plugins dabei verwenden. Oder aber ihr möchtet einen weiteren schönen Backlink. Dann nur zu. Aber selbstverständlich behalte ich es mir wie immer vor, reine Werbelinks, Affiliate-Links oder Links zu Seiten, die meinen Überzeugungen widersprechen, zu entfernen. So fair muss man dann auch sein und das akzeptieren 😉
Toll, dass du jeden Tag ein neues, spannendes Thema findest und so gut verständlich erklärst. Zwischendurch bin ich schon ein bisschen gespannt, was du am nächsten Tag veröffentlichst und würde gerne vorab einen Blick riskieren. 😉 Aber geplante Beiträge haben natürlich den Status Entwurf und sind damit dem Zugriff entzogen. – Genau das lässt sich aber unter Umständen umgehen, wenn du Shortcodes in Kommentaren generell aktivierst.
Nehmen wir an, Du verwendest das beliebte Plugin Shortcodes Ultimate, um damit z.B. Inhalte in Tabs darzustellen. Ob du dieses Plugin verwendest, lässt sich ganz einfach mit einem Blick in die Developer Tools des Browsers (Tab Sources) herausfinden. (Alternativ brauche ich auch nur eines der im Plugin verwendeten Stylesheets direkt abzurufen.)
Wenn ich nun Dank deiner Anpassung ungehindert Shortcodes ausführen kann, erhalte ich aber auch mühelos Einblick in bisher unveröffentlichte Beiträge und Seiten. Dazu genügt es, wenn ich in den Kommentar den Shortcodes Ultimate-Shortcode
[su_posts tax_operator="0" order="desc" post_status="draft"]
einfüge.Selbst die Einstellung, dass alle Kommentare vor Veröffentlichung moderiert werden müssen, schützt hier nicht vor der unerwünschten Preisgabe (noch) nicht veröffentlichter Beiträge, da ich nach dem Absenden zumindest meinen eigenen Kommentar (versehen mit dem Hinweis „Dein Kommentar wartet auf Moderation“) sehe. Die Umsetzung des eingeschleusten Shortcodes ist dann zumindest für mich schon sichtbar.
Sicherlich ist das alles ein wenig konstruiert, aber es gibt vielleicht den einen oder die andere AnwenderIn, die den Tipp schick findet und umsetzt, ohne sich weitere Gedanken über die Folgen zu machen.
Vielen Dank für den Hinweis Bego. Es kann natürlich wirklich sein, dass man in seiner WordPress Installation Shortcodes aktiv hat, die eine solche „Sicherheitslücke“ verursachen können. Hier könnte eventuell ein Plugin wie etwas Shortcode in Comment helfen, bei dem man anscheinend ein Whitelisting vornehmen kann.
Aber deinem Wunsch zur „Preview“ meiner Beiträge würde ich gerne nachkommen. Ich hatte ja einen Beitrag wirklich „live“ gebloggt. Also nach dem ersten Absatz auf veröffentlichen geklickt und dann nach jedem weiteren aktualisiert. Eine noch schnellere Live-Blogging-Funktion wäre echt cool, habe ich aber nicht gefunden. Vielleicht muss ich da mal selbst ran 🙂
Ach, ich freue mich auch so schon auf künftige Beiträge, auch wenn sie vermutlich nicht mehr täglich erscheinen, wie in deinem Adventskalender. Eine Vorschau muss gar nicht sein, es soll ja auch ein bisschen spannend bleiben. ?