Acum câteva zile am lucrat la un blog pe blogul personal despre câteva povestiri recente. Am vrut să atribui aceste povestiri sursei / autorului, care, în unele cazuri, erau de pe Twitter. Am inceput sa ma conectez manual la manualele Twitter in editorul WordPress cand mi-am dat seama ca exista o modalitate mai usoara de a face acest lucru care sa se intoarca inapoi si sa lege orice Twitter care nu se leagă pe blogul meu. Iar răspunsul a fost un filtru de conținut simplu.
Notă: Aceasta nu se integrează cu API-ul Twitter / inclusiv tweets. Dacă doriți să învățați cum să faceți acest lucru, mergeți la un tutorial minunat al lui Stephen despre Crearea unei Widgeturi Tweets Recent.
Deci, pentru a îndeplini această sarcină, trebuie să folosim două lucruri: Filtre de conținut WordPress și Expresii regulate (sau Regex pe scurt). În primul rând vă voi arăta codul și apoi îl vom putea trece prin:
funcția wptuts_twitter_handles ($ content) $ pattern = '| @ ([a-zA-Z0-9 _] *) |'; $ înlocuire = @ $ 1 '; $ content = preg_replace ($ pattern, $ replace, $ content); returnați conținut $; add_filter ("the_content", "wptuts_twitter_handles");
Bine - primul lucru pe care îl facem este definirea funcției noastre, wptuts_twitter_handles ()
(Notă am adăugat un prefix pentru a preveni suprascrierea / erorile). Această funcție va fi chemată în noi add_filter ()
, unde specificăm ce vrem să filtrăm (sau să schimbăm) și o funcție de apel invers. Din acest motiv, funcția noastră are un argument, conținut $
, care este conținutul postului curent.
Nota 2: Eu nu sunt un expert Regex și Google ma ajutat foarte mult. Voi lega la postările pe care le-am folosit și le voi explica expresiile cât de bine pot.
Pentru a atinge acest obiectiv, vom folosi o funcție PHP pentru procesarea expresiilor regulate numite preg_replace ()
, care acceptă un model pe care îl căutăm, ce vrea să înlocuiască acel model și șirul pe care dorim să îl căutăm. Returnează șirul modificat. Vom face o presupunere aici: orice șir alfa-numeric, cu includerea sublinierii (_), precedat de un simbol (@) este un mâner Twitter. Ceea ce vrem să facem este să privim conținutul nostru pentru oricare dintre aceste șiruri și să le facem hyperlink-uri către profilurile Twitter. Modelul (așa cum este definit în model de $
variabila) pe care o folosim este aceasta: | @ ([A-zA-Z0-9 _] *) |
. Conductoarele de pe ambele capete sunt pur și simplu delimitează începutul și sfârșitul, spunând programului nostru să caute ceea ce se află între ele. Simbolul "@" va fi luat literal, deoarece este în afara parantezei. În interiorul parantezei se află unde se petrece magia. Sectiunea '[A-zA-Z0-9_]
"spune programului nostru să caute orice șir cu majuscule, majuscule și sublinieri, în orice ordine. Asteriscul (*) spune că se poate întâmpla 0 sau de mai multe ori (aceasta este metoda lacomă, ar putea fi înlocuită cu "+", care este de 1 sau mai multe). Vrem să înlocuim modelul cu un link Twitter cu modelul, așa cum este definit în variabila noastră $ înlocui
. preg_replace ()
va stoca fiecare meci într-o variabilă numerică, pe care o putem apoi să o menționăm în șirul de înlocuire. Din moment ce căutăm doar un singur model, vom face referire $ de 1
.
Acum vom face înlocuirea reală, pe care o facem pe această linie: $ content = preg_replace ($ pattern, $ replace, $ content);
. Acest lucru va înlocui conținutul nostru actual cu conținutul conectat. Ne intoarcem conținut $
și boom-ul! Manerele noastre Twitter sunt acum conectate fără ca noi să o facem manual.
După cum a spus Colombo (și mai târziu Steve Jobs) când a fost gata să se încheie, am doar un alt lucru de spus. În timp ce modelul nostru curent detectează de fapt mânerele Twitter, va detecta și adresele de e-mail, așa cum se întâmplă aici pe blogul meu:
Din această cauză, avem nevoie de o expresie regulată, care este puțin mai sofisticată, căutând un anumit text înainte de simbolul "@", pentru a vă asigura că nu conectăm o adresă de e-mail. Utilizatorul Twitter @shasmirj ne oferă o expresie foarte frumoasă pentru a face acest lucru pe blogul său. Să înlocuim model de $
in functia noastra cu aceasta:
$ pattern = '/ (?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9_]+)/i';
După cum puteți vedea, este un pic mai complicat. În esență, ceea ce se întâmplă aici este că vrem să ne asigurăm câteva lucruri înainte ca simbolul "@" (și anume șirurile alfanumerice) să fie excluse. Cu Regex, simbolul morcov (^) este utilizat pentru excludere. Ceea ce spune acest model este de a exclude orice șir care are numere sau litere înainte de '@' în timp ce verifică în mod corespunzător numele de utilizator Twitter. Verificarea alfa-numerică este importantă; dorim încă ca legătura Twitter să fie legată dacă, de exemplu, o punem în paranteză. Aceasta este de fapt ceva mai bună decât cea de mai sus, deoarece verifică pentru a vă asigura că primul simbol este strict o literă, ceea ce este o cerință pentru mâinile Twitter. Cea mai bună parte a acestei implementări este că va exclude textul conectat, deci dacă aveți postări mai vechi pe bloguri, unde le legați manual un mâner Twitter, acestea nu se vor rupe!
Aceasta înseamnă că noua noastră funcție arată astfel:
funcția 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" );
Trebuie doar să copiați acest băiat rău și să îl lipiți în dvs. functions.php fișier și veți fi bine să plecați! Și ca un fapt amuzant, puteți folosi același model pentru a detecta și a lega hashtag-urile. Doar înlocuiți simbolul "@" cu un semn numeric (#).