În primul post din această serie, am aruncat o privire asupra varietății de e-mailuri pe care WordPress le trimite în funcție de modul în care este folosit. Am discutat, de asemenea, cum este posibil să personalizați e-mailurile pe care WordPress le trimite fără a trebui să externalizeze funcționalitatea către serviciile terților.
Am analizat, de asemenea, diferitele filtre pe care WordPress le prevede pentru a se încadra în sistem pentru a personaliza e-mailurile noastre; cu toate acestea, deoarece numărul de e-mailuri pe care le trimite WordPress este atât de mare, am optat pentru o analiză concentrată asupra moderării comentariilor și a e-mailurilor de notificare a comentariilor.
Deci, în acest articol, vom construi un plugin care ne va permite să personalizăm complet aspectul și e-mail-urile specifice comentariilor. În cele din urmă, aceasta ar trebui să vă ofere câteva informații despre cum funcționează cârligele disponibile, ce este necesar pentru a personaliza e-mailurile și cum puteți profita de API-ul WordPress pentru a personaliza conținutul e-mailurilor dvs..
Deoarece scopul acestui articol este menit să servească drept tutorial pentru construirea unui plugin, să mergem mai departe și să începem cu pașii necesari pentru a ne începe.
Deși întregul proiect este disponibil pe GitHub pentru referință, recomand foarte mult să urmați împreună cu pașii din acest articol inainte de descărcarea pluginului de lucru. La urma urmei, este menit să ofere o referință pentru situația în care lucrurile merg prost - nu pentru a vă ajuta să ajungeți la concluzie.
Primul lucru pe care trebuie să-l facem este să configurați un director pentru pluginurile noastre. Putem face acest lucru prin crearea unui personalizate-comment-e-mailuri
directorul din wp-content / plugins
.
Apoi, creați următoarele directoare și fișiere:
lang /
lang / plugin.po
plugin.php
Rețineți că lang
directorul va fi folosit pentru a păstra fișierele de localizare pentru alții pentru a furniza traduceri.
În plugin.po
adăugați următorul text:
msgstr "" "Versiunea de proiect: Versiuni personalizate de comentariu \ n" "Report-Msgid-Bugs-To: \ n" "POT-Creare-dată: 2012-12-05 14: 17-0500 \ n "" PO-Revizie-Data: 2012-12-05 14: 17-0500 \ n "" Ultimul Traducător: Tom McFarlin \ n "" Limba-Echipa: Tom McFarlin \ -Version: 1.0 \ n "" Content-Type: text / plain; charset = UTF-8 \ n " "X-Poedit-SearchPath-0: ... \ n" "X-Poedit-Sourcepars: utf-8 \ n"
Evident, veți dori să personalizați acest lucru pentru a satisface nevoile dvs., dar obțineți ideea generală. După ce ați terminat, asigurați-vă că ați luat o copie a POEdit, deoarece vom folosi acest program pentru a genera fișiere MO care sunt utilizate pentru localizare.
Vom lua o abordare orientată pe obiecte pentru a construi plugin-ul nostru, astfel încât să mergem mai departe și să stub în afara clasei care va servi drept nucleul plugin-ului nostru.
Pentru acest plugin, trebuie să furnizăm definiția antetului, un constructor, trei funcții și o metodă de ajutor. Destul de ușor, corect?
Vom lucra la completarea acestor funcții în tot acest articol, dar continuați și examinați comentariile codului, astfel încât să aveți o înțelegere clară a locului în care ne îndreptăm.
Configurarea constructorului
Primul lucru pe care trebuie să-l facem este să pregătim constructorul. Rețineți că această parte a clasei este responsabilă pentru inițializarea pluginului, configurarea informațiilor de localizare și specificarea oricărui cârlig.
Din moment ce am eliminat deja funcțiile necesare, ar trebui să fie ușor de urmat cu ceea ce se întâmplă, dar au fost furnizate comentarii de cod pentru a fi complete.
funcția __construct () // Încărcați pluginul domeniului text add_action ('init', array ($ this, 'plugin_textdomain')); / * Setați filtrele pentru aprobarea comentariilor și e-mailul de notificare a comentariilor. * Pentru scopurile acestui plug-in de exemplu, acestea vor fi acelasi e-mail. * Deși într-un mediu de producție doriți să includeți linkurile tipice * 'Approve', 'Spam' și 'Trash'. * / // Moderarea add_filter ('comment_moderation_headers', array ($ this, 'email_headers') ), add_filter ('comment_moderation_text', array ($ this, 'email_text'), 10, 2); // Notificări add_filter (' "add_filter ('comment_notification_text', array ($ this, 'email_text'), array ($ this, 'email_text'); , 10, 2); // constructor finalPe scurt, am specificat funcția de setare a domeniului text al plugin-ului pentru scopuri de localizare și am specificat cârligele pe care le vom folosi. Anume, cele pentru moderarea comentariilor și notificarea comentariilor.
Localizare
Apoi, definim funcția care va prelua fișierele de localizare a pluginului din
lang
directorul pe care l-am creat când inițializăm acest plugin.Acesta este un simplu apel de linie unică furnizat de API-ul WordPress.
/ ** * Încărcarea domeniului de text plugin pentru traducere * / funcția publică plugin_textdomain () load_plugin_textdomain ('custom-comment-email-locale', false, dirname (plugin_basename (__FILE__)). // end plugin_textdomainRecepția cheie din această funcție este cheia pe care am folosit-o pentru a identifica localizarea acestui plugin. Pentru cei care nu sunt familiarizați, acest lucru trebuie să fie unic, deoarece este ceea ce va permite traducătorilor să furnizeze versiuni localizate de șiruri de caractere pe care le vom adăuga în restul acestui plugin.
În afară de asta, localizarea este bună să meargă.
Filtre
Înainte de a implementa funcționalitatea e-mailurilor noastre de notificare, există o distincție de import pe care trebuie să o facem. Mai exact, trebuie să vorbim despre diferența dintre e-mailurile de moderare și e-mailurile de notificare.
Implicit, WordPress cere ca orice comentariu lăsat asociat unei adrese de e-mail care nu este recunoscută de către autorizat. Acest lucru declanșează un e-mail pentru a fi trimis administratorului site-ului (sau autorului postului de blog) pentru a aproba comentariul. De la acel moment, comentariile vor fi aprobate automat.
Acestea fiind spuse, WordPress nu permite administratorilor să dezactiveze această funcție de moderare și să lase pe oricine să lase un comentariu, indiferent dacă au făcut-o anterior.
Aduc acest lucru, deoarece acest lucru influențează modul în care vom dezvolta acest plugin. Există șase cârlige - trei pentru moderare și trei pentru notificare - toate fiind similare în măsura în care sunt legate de antetul unui e-mail, subiectul mesajului și mesajul.
Cârligele sunt după cum urmează:
Pentru a face lucrurile simple, vom asocia cele trei funcții cu toți şase Plugin-uri. Aceasta înseamnă că utilizatorii vor vedea același e-mail pentru moderare, precum și pentru notificare.
Într-un mediu de producție, acest lucru nu este neapărat ideal; cu toate acestea, pentru a demonstra cum să profitați de aceste cârlige și cum să personalizați e-mailurile, funcționează bine.
În primul rând, să începem cu sarcina simplă de a actualiza linia subiectului e-mailului. Acest lucru nu necesită să lucrăm cu nici un marcaj (care este oarecum o durere în clienții de e-mail oricum, după cum veți vedea în curând :) și este o funcție simplă pe care o putem personaliza cu ușurință.
Pentru exemplul nostru, să rescrim linia de subiect a e-mailului pentru a citi:
[Titlul postării] Hei There - Se pare că ai un comentariu nou!
Pentru aceasta, localizați Subiectul emailului
funcția și apoi actualizați-o pentru a include următoarele. Comentariile codului sunt furnizate pentru completare, dar o vom discuta un pic mai mult după funcția:
/ ** * Creează subiectul personalizat pentru e-mailul de notificare a comentariilor. * @ @ param string $ subject Conținutul subiectului * @param int $ comment_id ID-ul comentariului pentru care acest subiect este trimis * @return Linia subiectului pentru email * @since 1.0 * / function email_subject ($ subject , $ comment_id) // Creează linia subiectului în următorul format: "[Titlul postării] Hei There - Se pare că ai un comentariu nou!" $ subject = __ ("[", "custom-comment-email-locale"). $ this-> get_post_title ($ comment_id). __ ("]", "personalizat-comment-email-locale"); $ subiect. = ""; $ topic = = __ ("Hei There - Se pare ca ai un nou comentariu!", "custom-comment-email-locale"); returnați subiectul $; // final nume_parametru_metodă
Observați că funcția acceptă doi parametri - subiectul și ID-ul comentariului. Subiectul este subjetul original care este trecut în funcție. Acest lucru este util dacă doriți să prependați sau să adăugați text la linia de subiect, dar vom scrie propriul nostru, astfel încât acesta va fi de fapt suprascris.
Codul de comentariu este util, deoarece ne va permite să preluăm o varietate de informații, cum ar fi postarea, titlul postului și așa mai departe, folosind pur și simplu ID-ul comentariului.
De fapt, așa obținem titlul postului pentru linia de subiect. Observați, totuși, că în postarea noastră sunăm $ this-> get_post_title ($ comment_id)
.
Aceasta este funcția de ajutor pe care am definit-o pentru a ne ajuta să preluăm cu ușurință titlul postului asociat cu comentariul dat. Am abstracționat-o într-o funcție de ajutor, astfel încât să putem folosi ulterior în plugin.
Funcția de ajutor este simplă:
/ ** * Preia ID-ul postului asociat cu acest comentariu. * * @param int $ comment_id ID-ul comenzii pe care o folosim pentru a obține titlul postului * string @return Titlul postării comentariului * @since 1.0 * / funcția privată get_post_title ($ comment_id) $ comment = get_comment ($ comment_id); returnați get_the_title ($ comment-> comment_post_ID); // end get_post_title
E clar, nu? Obțineți o referință la obiectul de comentariu de către ID-ul specificat, apoi returnați titlul postării care este asociat codului de postare al comentariului dat.
În acest moment, nu ezitați să vă testați codul. Presupunând că ați urmat pașii din primul articol, trebuie să aveți o configurație a mediului de dezvoltare care trimite e-mailuri în căsuța de e-mail.
Activați plugin-ul, lăsați un comentariu despre postare și ar trebui să vedeți o nouă linie de subiect.
Neat, huh?
Apoi, suntem gata să începem să setăm textul de e-mail. În plugin-ul nostru, permiteți-ne să includeți următoarele e-mailuri:
De asemenea, vom oferi un stil care să demonstreze modul în care putem personaliza cu ușurință aspectul și e-mailul.
Deci localizați email_text
funcția și include următoarele:
/ ** * Creează un e-mail personalizat, folosit pentru a anunța utilizatorii că au un comentariu nou. * * @ param string $ message Conținutul e-mailului * @param int $ comment_id ID-ul comentariului rămas * @return Conținutul personalizat al emailului * @since 1.0 * / funcția email_text ($ message, $ comment_id) // Returnați comentariul $ comment = get_comment ($ comment_id); // Definiți antetul $ message = '„; $ message. = __ ('Comentariu pentru', 'custom-comment-email-locale'); $ message = $ this-> get_post_title ($ comentariu_id); $ message = '
„; $ message = '„; $ message = '„; // Determinați ce tip de comentariu este: $ comment_type = __ ('comment normal', 'custom-comment-email-locale'); dacă "(*! $ comment-> comment_type) $ comment_type = __ ('trackback sau pingback.', 'custom-comment-email-locale') // end if // și setați mesajul subsol $. = '". __ ("Conținutul original al acestui e-mail a fost citit: ',' custom-comment-email-locale '). '
„; $ message = $ comment-> comment_content; $ message = '„; $ message. = __ ('Acest comentariu a fost lăsat de', 'custom-comment-email-locale'). 'comment_author_email. ''> '. $ comment-> comment_author_email. ".„; $ message =. ('|', 'custom-comment-email-locale'); $ message. = __ ('Acesta este un', 'custom-comment-email-locale'). '". $ comment_type. '.„; $ message = '„; returnează mesajul $; // end email_text
Deși comentariile codului trebuie să fie relativ clare, rețineți că facem următoarele:
Rețineți, de asemenea, că am scris câteva stiluri inline. Presupun că veți folosi Gmail ca client de e-mail atunci când testați aceste e-mailuri; cu toate acestea, fiecare client de e-mail se ocupă de stiluri în mod diferit, așa că asigurați-vă că ați revizuit această diagramă dacă ați terminat să faceți acest lucru în unele dintre proiectele dvs. de producție.
După ce ați terminat, declanșați un alt e-mail și ar trebui să vedeți ceva de genul:
Hopa! Asta- nu ceea ce vrem. Din fericire, aceasta este o rezolvare ușoară și necesită încă o linie de cod în plugin.
Pentru a trimite mesaje bazate pe stil HTML, folosind WordPress, trebuie să setăm corect anteturile e-mailului. Pentru a face acest lucru, actualizați email_headers
funcția de a arăta astfel:
/ ** * Setează antetele pentru e-mailul trimis pentru e-mailul de notificare a comentariilor. * * @ de la 1.0 * / funcția email_headers () add_filter ('wp_mail_content_type', create_function ("," return "text / html"; '));
Aceasta informează clientul de e-mail pentru a redarea conținutului ca HTML. Permițând că ați făcut acest lucru, ar trebui să vedeți ceva de genul:
Mult mai bine!
Evident, am zgâriat doar suprafața cât de puternică poate fi personalizarea e-mailurilor bazate pe WordPress mai ales dacă aveți timp pentru a genera un marcaj frumos, stiluri elaborate, și așa mai departe.
În opinia mea, cel mai important lucru pe care trebuie să-l înțelegeți este modul de a introduce în filtrele furnizate care ne permit să facem toate cele de mai sus.
Sperăm că această serie a furnizat suficiente informații pentru a vă începe. Nu uitați să verificați pluginul pe GitHub și noroc cu aceste e-mail-uri personalizate!