I det første innlegget i denne serien tok vi en titt på ulike e-postmeldinger som WordPress sender, avhengig av hvordan den brukes. Vi diskuterte også hvordan det er mulig å tilpasse e-postmeldinger som WordPress sender uten å faktisk måtte outsource funksjonaliteten til tredjepartstjenester.
Vi har også gjennomgått de ulike filtrene som WordPress gir for å hekte inn i systemet for å tilpasse våre e-postmeldinger; Men fordi antall e-postmeldinger som WordPress sender, er så stort, har vi valgt å ta et fokusert blikk på kommentarmåling og kommentarsvarsel e-post.
Så i denne artikkelen skal vi bygge et plugin som gjør at vi kan tilpasse utseendet til kommentarspesifikke e-poster. Til slutt bør dette gi deg litt innsikt i hvordan de tilgjengelige krokene fungerer, hva som kreves for å tilpasse e-postene, og hvordan du kan dra nytte av WordPress API for å tilpasse innholdet i e-postene dine.
Fordi formålet med denne artikkelen er ment å fungere som en veiledning for å bygge et plugin, la oss gå videre og begynne med de praktiske trinnene som er nødvendige for å få oss i gang.
Selv om hele prosjektet er tilgjengelig på GitHub som referanse, anbefaler jeg at du følger med trinnene i denne artikkelen før laster ned arbeidspluggen. Tross alt er det ment å gi en referanse for når ting går galt - ikke for å hjelpe deg med å hoppe til konklusjonen.
Det første vi må gjøre er å sette opp en katalog for pluginene våre. Vi kan gjøre dette ved å opprette en custom-kommentar-eposter
katalog i wp-innhold / tillegg
.
Deretter oppretter du følgende kataloger og filer:
lang /
lang / plugin.po
plugin.php
Legg merke til at lang
katalogen vil bli brukt til å beholde lokaliseringsfilene for andre til å levere oversettelser.
I plugin.po
legg til følgende tekst:
msgstr "" "Prosjekt-ID-versjon: Egendefinerte kommentarer e-postmeldinger \ n" "Report-Msgid-Bugs-To: \ n" "POT-opprettelsesdato: 2012-12-05 14: 17-0500 \ n "" Po-Revision-Date: 2012-12-05 14: 17-0500 \ n "" Siste oversetter: Tom McFarlin \ n "" Språk-Team: Tom McFarlin \ n "" Språk: no_US \ n "" MIME -Version: 1.0 \ n "" Content-Type: text / plain; charset = UTF-8 \ n "" Content-Transfer-Encoding: 8bit \ n "" X-Poedit-NøkkelordListe: __; _ e \ n "" X -Pedit-Basepath:. \ N "" X-Poedit-SourceCharset: utf-8 \ n "" X-Generator: Poedit 1.5.4 \ n "" X-Poedit-SearchPath-0: ... \ n "
Åpenbart vil du tilpasse dette for å dekke dine behov, men du får den generelle ideen. Når du er ferdig, må du sørge for at du tar en kopi av POEdit da vi skal bruke dette programmet for å generere MO-filene som brukes til lokalisering.
Vi tar en objektorientert tilnærming til å bygge vårt plugin, så la oss gå videre og stub ut klassen som vil fungere som kjernen i plugin-modulen vår.
For dette pluginet må vi gi headerdefinisjonen, en konstruktør, tre funksjoner og en hjelpemetode. Lett nok, rett?
Vi jobber med å fylle ut disse funksjonene gjennom hele denne artikkelen, men gå videre og gå gjennom kodens kommentarer slik at du har en klar forståelse av hvor vi er på vei.
Konfigurere Konstruktøren
Det første vi må gjøre er å forberede konstruktøren. Husk at denne delen av klassen er ansvarlig for å initialisere pluginet, sette opp lokaliseringsinformasjon og spesifisere eventuelle kroker.
Siden vi allerede har stubbet ut de nødvendige funksjonene, bør det være enkelt å følge med på hva som skjer, men kodekommentarer er gitt for fullstendighet.
funksjon __construct () // Legg inn plugin-tekstdomenet add_action ('init', array ($ this, 'plugin_textdomain')); / * Angi filtre for kommentar godkjenning og kommentar melding e-post. * For bruk av dette eksemplet plugin, vil disse være samme e-post. * Selv om du er i et produksjonsmiljø, vil du naturligvis inkludere de typiske * 'Godkjenn,' Spam 'og' Trash'-koblingene. * / // Moderering add_filter ('comment_moderation_headers', array ($ this, 'email_headers') ); add_filter ('comment_moderation_subject', array ($ dette, 'email_subject'), 10, 2); add_filter ('comment_moderation_text', array ($ this, 'email_text'), 10, 2); // Notifications add_filter comment_notification_headers ', array ($ this,' email_headers ')); add_filter (' comment_notification_subject ', array ($ this,' email_subject '), 10, 2); add_filter (' comment_notification_text ', array ($ this,' email_text ') , 10, 2); // endekonstruktorKort sagt, vi har angitt funksjonen for å angi pluginens tekstdomene for lokaliseringsformål og Vi har angitt kroker som vi skal bruke. Nem dem for kommentar moderering og kommentar melding.
lokalisering
La oss da definere funksjonen som henter pluginens lokaliseringsfiler fra
lang
katalog som vi opprettet ved initialisering av dette plugin.Dette er et enkelt, enkeltlinjeanrop som tilbys av WordPress API.
/ ** * Laster plugin-tekstdomenet for oversettelse * / public function plugin_textdomain () load_plugin_textdomain ('custom-comment-email-locale', falsk, dirname (plugin_basename (__FILE__)). '/ Lang'); // end plugin_textdomainNøkkelfunksjonen fra denne funksjonen er nøkkelen som vi har brukt til å identifisere denne pluginens lokalitet. For de som ikke er kjent, må dette være unikt, da det er det som gjør det mulig for oversettere å gi lokale versjoner av strenge som vi legger til i resten av denne plugin.
Annet enn det, er lokalisering bra å gå.
filtre
Før vi faktisk implementerer funksjonaliteten for våre e-postvarsler, er det en importforskjell som vi må gjøre. Spesielt trenger vi å snakke om forskjellen i moderat e-post og i varsel e-post.
Som standard krever WordPress at eventuelle kommentarer som er knyttet til en e-postadresse som ikke er godkjent av autorisert. Dette utløser en e-post som skal sendes til nettstedadministratoren (eller bloggpostforfatteren) for å godkjenne kommentaren. Fra det tidspunktet blir kommentarene automatisk godkjent.
Når det er sagt, tillater WordPress administratorer å deaktivere denne modereringsfunksjonaliteten og la noen legge igjen en kommentar uansett om de tidligere har gjort det.
Jeg tar opp dette fordi dette påvirker måten vi utvikler dette pluginet på. Det er seks kroker - tre for moderering og tre for varsel - alle er like ved at de er relatert til e-postens overskrift, emnelinje og melding.
Krokene er som følger:
For å gjøre ting enkle, vil vi knytte våre tre funksjoner sammen med alle seks plugins. Dette betyr at brukerne vil se samme e-post for moderering og for varsel.
I et produksjonsmiljø er dette ikke nødvendigvis ideelt; Men for å demonstrere hvordan du kan dra nytte av disse krokene og hvordan du tilpasser e-post, fungerer det bra.
Først, la oss begynne med den enkle oppgaven med å oppdatere e-postens emnelinje. Dette krever ikke at vi jobber med noen merking (noe som er noe av en smerte i e-postklientene uansett, som du snart vil se :), og det er en enkel funksjon som vi lett kan tilpasse.
For vårt eksempel, la oss omskrive e-postens emnelinje for å lese:
[Post Title] Hey There - Ser ut som om du har en ny kommentar!
For å gjøre dette, finn e-post Emne
funksjonen og oppdater deretter den for å inkludere følgende. Kodekommentarer er gitt for fullstendighet, men vi diskuterer det litt mer like etter funksjonen:
/ ** * Oppretter det tilpassede emnet for kommentarvarslingsmailen. * * @param string $ subject Innholdet i emnet * @param int $ comment_id IDen til kommentaren som dette emnet blir sendt til * @return Emnelinjen for e-postadressen * @since 1.0 * / function email_subject ($ emne , $ comment_id) // Opprett emnelinjen i følgende format: "[Post Title] Hey There - Ser ut som om du har en ny kommentar!" $ subject = __ ("[", "egendefinert-kommentar-e-post-lokal"). $ this-> get_post_title ($ comment_id). __ ("]", "egendefinert-kommentar-e-post-lokal"); $ subject. = ""; $ subject. = __ ("Hei der - Ser ut som om du har en ny kommentar!", "egendefinert-kommentar-e-post-lokal"); returnere $ emne; // end filter_method_name
Legg merke til at funksjonen aksepterer to parametere - emne og kommentar ID. Faget er det opprinnelige undernavnet som sendes inn i funksjonen. Dette er nyttig hvis du vil legge ut eller legge til tekst på emnelinjen, men vi skal skrive vår egen, så det vil faktisk bli overskrevet.
Comment_ID er nyttig fordi det vil tillate oss å hente en rekke opplysninger som posten, innleggets tittel og så videre ganske enkelt fra å bruke kommentar-ID.
Faktisk er det slik vi henter posttittelen for emnelinjen. Legg merke til at i vårt innlegg vi ringer til $ this-> get_post_title ($ comment_id)
.
Dette er hjelperfunksjonen som vi har definert for å hjelpe oss med å enkelt hente posttittelen som er knyttet til den oppgitte kommentaren. Vi har abstrakt det til en hjelperfunksjon, slik at vi kan bruke den senere i plugin.
Hjelperfunksjonen er enkel:
/ ** * Henter ID for innlegget som er knyttet til denne kommentaren. * * @param int $ comment_id IDen til kommentaren som vi bruker for å få posttittelen * @return string Tittelen på kommentarens innlegg * @since 1.0 * / private funksjon get_post_title ($ comment_id) $ comment = get_comment ($ comment_id); return get_the_title ($ comment-> comment_post_ID); // end get_post_title
Klart, ikke sant? Få en referanse til kommentarobjektet med den angitte IDen, og send deretter tittelen på innlegget som er knyttet til den oppgitte kommentarens post-ID.
På dette tidspunktet er du velkommen til å teste koden din. Forutsatt at du fulgte trinnene i den første artikkelen, bør du ha et utviklingsmiljøoppsett som sender e-post til innboksen din.
Aktiver plugin, legg inn en kommentar på innlegget, og du bør se en ny emnelinje.
Ryddig, hei?
Deretter er vi klare til å begynne å sette e-postteksten. I vårt plugin, la oss få e-posten inkluderer følgende:
Vi vil også gi noen styling for å demonstrere hvordan vi enkelt kan tilpasse utseendet på en e-post.
Så finn den EMAIL_TEXT
funksjon og inkludere følgende:
/ ** * Oppretter en tilpasset, stylet e-post som brukes til å varsle brukere om at de har en ny kommentar. * * @param string $ melding Innholdet i e-posten * @param int $ comment_id IDen til kommentaren som blir igjen * @return Det tilpassede kroppsinnholdet til e-posten * @since 1.0 * / function email_text ($ message, $ comment_id) // Hent kommentaren $ comment = get_comment ($ comment_id); // Definer overskriften $ message = ''; $ message. = __ ('Kommentar for', 'egendefinert-kommentar-e-post-lokal'); $ message. = $ this-> get_post_title ($ comment_id); $ message. = '
'; $ message. = ''; $ message. = ''; // Bestem hvilken type kommentar dette er: $ comment_type = __ ('normal kommentar.', 'Tilpasset kommentar-e-post-lokal'); hvis ("! = $ comment-> comment_type) $ comment_type = __ ('trackback eller en pingback.', 'custom-comment-email-locale'); // slutt hvis // = ''. __ ('Det opprinnelige innholdet i denne e-posten leses:', 'egendefinert-kommentar-e-post-lokal'). '
'; $ message. = $ comment-> comment_content; $ message. = ''; $ message. = __ ('Denne kommentaren ble igjen av', 'egendefinert-kommentar-e-post-lokal'). 'comment_author_email. '">'. $ comment-> comment_author_email. '.'; $ message. = __ ('|', 'egendefinert-kommentar-e-post-lokal'); $ message. = __ ('Dette er en', 'egendefinert-kommentar-e-post-lokal'). ''. $ comment_type. '.'; $ message. = ''; returner $ message; // ende email_text
Selv om kodekommentarene skal være relativt klare, merk at vi gjør følgende:
Vær også oppmerksom på at vi har skrevet noen inline-stiler. Jeg antar at du bruker Gmail som e-postklient når du tester disse e-postene; men hver e-postklient håndterer stiler annerledes, så vær sikker på å se gjennom dette diagrammet hvis du ender opp med å gjøre dette i noen av dine produksjonsskatteprosjekter.
Når du er ferdig, utløs en annen e-post, og du bør se noe som følger:
Oops! det er ikke hva vi vil. Heldigvis er dette en enkel løsning, og det krever en ny linje med kode i plugin.
For å sende stilige, HTML-baserte meldinger som bruker WordPress, må vi sette topptekstene for e-posten på riktig måte. For å gjøre dette oppdaterer du email_headers
funksjon for å se slik ut:
/ ** * Angir topptekstene for e-posten som sendes for kommentarvarslings-e-postadressen. * * @since 1.0 * / funksjon email_headers () add_filter ('wp_mail_content_type', create_function ("," return "tekst / html"; ")); Endre email_headers
Dette informerer e-postklienten om å gjøre innholdet til HTML. Tillat at du har gjort dette riktig, bør du se noe som følger:
Mye bedre!
Åpenbart har vi bare riper overflaten av hvor kraftig tilpassing av WordPress-baserte e-postmeldinger kan være spesielt hvis du tar deg tid til å generere noen fine oppslag, utarbeide stiler, og så videre.
Etter min mening er det viktigste å forstå hvordan man kobler seg til filtre som er gitt som tillater oss å gjøre alt ovenfor.
Forhåpentligvis har denne serien gitt nok informasjon for å komme i gang. Husk å sjekke ut plugin på GitHub, og lykke til med de egendefinerte e-postene!