Crearea de e-mailuri cu comentarii personalizate construirea unui plugin

Î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..


Pregătirea pluginului

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.

Configurarea directorului

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.

Fișierul de localizare

Î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.

Fișierul Plugin

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 final

Pe 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_textdomain

Recepț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ă:

  • comment_moderation_headers
  • comment_moderation_subject
  • comment_moderation_text
  • comment_notification_headers
  • comment_notification_subject
  • comment_notification_text

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.

Subiectul

Î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).

O funcție mică de ajutor

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?

Textul de e-mail

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:

  • Un antet care citește "Comentariu pentru [Titlul postării]"
  • O zonă pentru conținutul care citește "Conținutul original al acestui e-mail:" după care vom include comentariile inițiale
  • Un subsol simplu care denotă dacă acesta este un comentariu normal sau un trackback sau pingback și care include adresa de e-mail a autorului comentariului.

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 = '

". __ ("Conținutul original al acestui e-mail a fost citit: ',' custom-comment-email-locale '). '

„; $ message = $ comment-> comment_content; $ 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 $. = '
„; $ 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:

  • Preluarea comentariului
  • Configurarea unui antet pentru e-mail (unde, de asemenea, preluăm titlul postului folosind funcția noastră de ajutor)
  • Scrierea codului original
  • Definirea unui subsol care să arate tipul de comentariu și autorul comentariului

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.

Setarea anteturilor

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!


Concluzie

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!


Resurse

  • Crearea de e-mailuri pentru comentarii personalizate - Partea 1: Înțelegerea API-ului
  • Ghidul Monitorului de campanie la CSS în e-mailuri
  • Comentariu pentru e-mailurile personalizate pentru comentarii
Cod