Schneller Tipp Verknüpfen Sie Twitter-Griffe automatisch mit einem Inhaltsfilter

Vor ein paar Tagen arbeitete ich an einem Blogeintrag in meinem persönlichen Blog über einige aktuelle Geschichten. Ich wollte diese Geschichten der richtigen Quelle / Autor zuordnen, die in einigen Fällen von Twitter stammte. Ich fing an, Twitter-Handles im WordPress-Editor manuell zu verknüpfen, als mir klar wurde, dass es einen einfacheren Weg gab, dies zu tun. Dann würde ich zurückgehen und alle nicht verknüpften Twitter-Handles auf meinem Blog verlinken. Und die Antwort war ein einfacher Inhaltsfilter.

Hinweis: Dies ist nicht in die Twitter-API / Tweets integriert. Wenn Sie wissen möchten, wie das geht, lesen Sie Stephens großartiges Tutorial zum Erstellen eines Widget für aktuelle Tweets.


Unser Anfangsfilter

Um diese Aufgabe zu erfüllen, müssen wir zwei Dinge verwenden: WordPress-Inhaltsfilter und reguläre Ausdrücke (oder kurz Regex). Zuerst zeige ich dir den Code und dann können wir ihn durchgehen:

 Funktion wptuts_twitter_handles ($ content) $ pattern = '| @ ([a-zA-Z0-9 _] *) |'; $ replace = @ $ 1 '; $ content = preg_replace ($ pattern, $ replace, $ content); $ content zurückgeben;  add_filter ("the_content", "wptuts_twitter_handles");

Okay, als erstes definieren wir unsere Funktion, wptuts_twitter_handles () (Beachten Sie, dass ich ein Präfix hinzugefügt habe, um Überschreibungen / Fehler zu vermeiden). Diese Funktion wird in unserem aufgerufen add_filter () Funktion, bei der wir angeben, was wir filtern (oder ändern) möchten, und eine Rückruffunktion. Aus diesem Grund hat unsere Funktion ein Argument, $ content, Welches ist der Inhalt des aktuellen Beitrags.

Anmerkung 2: Ich bin kein Regex-Experte und Google hat mir sehr geholfen. Ich werde auf von mir verwendete Beiträge verweisen und die Ausdrücke so gut ich kann erklären.

Um dieses Ziel zu erreichen, verwenden wir eine PHP-Funktion zur Verarbeitung von aufgerufenen regulären Ausdrücken preg_replace (), Dies akzeptiert ein Muster, nach dem wir suchen, mit dem wir dieses Muster ersetzen möchten, und die Zeichenfolge, nach der gesucht werden soll. Es gibt die geänderte Zeichenfolge zurück. Wir werden hier eine Annahme treffen: Jede alphanumerische Zeichenfolge, die den Unterstrich (_) enthält, dem ein at-Symbol (@) vorangestellt ist, ist ein Twitter-Handle. Wir möchten unseren Inhalt nach einer dieser Zeichenfolgen durchsuchen und Hyperlinks zu Twitter-Profilen erstellen. Das Muster (wie in unserem definiert $ pattern Variable) verwenden wir Folgendes: | @ ([a-zA-Z0-9 _] *) |. Die Pipes an beiden Enden sind einfach Anfangs- und Endbegrenzer, damit unser Programm nach dem Zwischenraum suchen kann. Das @ -Zeichen wird wörtlich genommen, da es sich außerhalb der Klammer befindet. In der Klammer passiert die Magie. Die Sektion '[a-zA-Z0-9_]'weist unser Programm an, nach beliebigen Zeichenfolgen mit Klein- und Großbuchstaben, Ziffern und Unterstrichen in beliebiger Reihenfolge zu suchen. Das Sternchen (*) gibt an, dass es 0 oder mehr Male vorkommen kann (dies ist die gierige Methode; sie könnte durch '+' ersetzt werden, also 1 oder mehr). Wir möchten das Muster durch einen Twitter-Link zu dem in unserer Variablen definierten Muster ersetzen $ ersetzen. preg_replace () speichert jede Übereinstimmung in einer numerischen Variablen, auf die wir dann in der Ersetzungszeichenfolge verweisen können. Da wir nur nach einem Muster suchen, wird mit verwiesen 1 US-Dollar.

Jetzt machen wir den eigentlichen Ersatz, den wir in dieser Zeile ausführen: $ content = preg_replace ($ pattern, $ replace, $ content);. Dies wird unseren aktuellen Inhalt durch den verknüpften Inhalt ersetzen. Wir kehren zurück $ content und boom! Unsere Twitter-Handles sind jetzt verlinkt, ohne dass wir dies manuell tun müssen.


Eine Sache noch…

Wie Colombo (und später Steve Jobs) als er zum Abschluss bereit war zu sagen, ich habe nur noch eine Sache zu sagen. Während unser aktuelles Muster Twitter-Handles tatsächlich erkennt, erkennt es auch E-Mail-Adressen, wie hier in meinem Blog:


Es ersetzt nicht nur die E-Mail-Adresse, sondern auch die E-Mail-Adresse innerhalb des Hyperlinks, wodurch alles zerstört wird!

Aus diesem Grund benötigen wir einen regulären Ausdruck, der etwas komplexer ist, und vor dem "@" -Symbol nach einem bestimmten Text suchen, um sicherzustellen, dass wir keine E-Mail-Adresse verknüpfen. Der Twitter-Nutzer @shasmirj liefert uns einen wirklich schönen Ausdruck, um dies in seinem Blog zu tun. Lass uns ersetzen $ pattern in unserer Funktion damit:

 $ pattern = '/ (?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9_]+)/i';

Wie Sie sehen, ist dies etwas komplizierter. Das Wesentliche an dem, was hier vor sich geht, ist, dass wir ein paar Dinge vor dem '@'-Symbol (nämlich alphanumerischen Zeichenfolgen) ausschließen möchten. Bei Regex wird das Möhrensymbol (^) zum Ausschluss verwendet. Dieses Muster sagt im Wesentlichen aus, alle Zeichenfolgen auszuschließen, die vor dem '@' Ziffern oder Buchstaben enthalten, während sie noch ordnungsgemäß auf Twitter-Benutzernamen geprüft werden. Die alphanumerische Prüfung ist wichtig. Wir möchten immer noch, dass das Twitter-Handle verlinkt wird, wenn wir es zum Beispiel in Klammern setzen. Dieses ist tatsächlich ein bisschen besser als das oben, da überprüft wird, ob das erste Symbol nur ein Buchstabe ist. Dies ist eine Voraussetzung für Twitter-Handles. Das Beste an dieser Implementierung ist, dass sie verknüpften Text ausschließt. Wenn Sie also ältere Blogbeiträge haben, in denen Sie manuell ein Twitter-Handle verknüpfen, wird dieser nicht beschädigt!

Das heißt, unsere neue Funktion sieht folgendermaßen aus:

 Funktion wptuts_twitter_handles ($ content) $ pattern = '/ (?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9_]+)/i'; $replace= @$1'; $content= preg_replace($pattern, $replace, $content); return $content;  add_filter( "the_content", "wptuts_twitter_handles" );

Kopieren Sie einfach diesen bösen Jungen und fügen Sie ihn in Ihren ein Functions.php Datei und du wirst gut gehen! Und als Spaß können Sie dasselbe Muster verwenden, um Hashtags zu erkennen und zu verknüpfen. Ersetzen Sie einfach das "@" -Symbol durch ein Nummernzeichen (#)..