In het eerste bericht in deze serie hebben we gekeken naar de verscheidenheid aan e-mails die WordPress verzendt, afhankelijk van hoe het wordt gebruikt. We hebben ook besproken hoe het mogelijk is om e-mails aan te passen die door WordPress worden verzonden zonder de functionaliteit daadwerkelijk aan diensten van derden uit te besteden.
We hebben ook de verschillende filters beoordeeld die WordPress biedt voor het inhaken in het systeem om onze e-mails aan te passen; Omdat het aantal e-mails dat door WordPress wordt verzonden echter zo groot is, hebben we ervoor gekozen om aandacht te besteden aan moderatie van opmerkingen en e-mails met reacties..
In dit artikel gaan we dus een plug-in bouwen waarmee we het uiterlijk van specifieke e-mails voor reacties volledig kunnen aanpassen. Uiteindelijk zou dit u enig inzicht moeten geven in hoe de beschikbare hooks werken, wat nodig is om de e-mails aan te passen, en hoe u kunt profiteren van de WordPress API om de inhoud van uw e-mails aan te passen..
Omdat het doel van dit artikel bedoeld is als een handleiding voor het bouwen van een plug-in, laten we beginnen met de praktische stappen die nodig zijn om ons op weg te helpen.
Hoewel dit hele project ter referentie beschikbaar is op GitHub, raad ik ten zeerste aan om de stappen in dit artikel te volgen voor het downloaden van de werkende plugin. Het is tenslotte bedoeld om een referentie te geven voor wanneer het mis gaat - niet om u te helpen om tot de conclusie te komen.
Het eerste dat we moeten doen is een directory instellen voor onze plug-ins. We kunnen dit doen door een custom-commentaar-e-mails
map in wp-content / plugins
.
Maak vervolgens de volgende mappen en bestanden:
lang /
lang / plugin.po
plugin.php
Merk op dat de LANG
map zal worden gebruikt om onze lokalisatiebestanden voor anderen te behouden voor vertalingen.
In plugin.po
voeg de volgende tekst toe:
msgid "" msgstr "" "Project-Id-versie: Aangepaste Commentaar E-mails \ n" "Rapport-Msgid-Bugs-Aan: \ n" "POT-Creation-Datum: 2012-12-05 14: 17-0500 \ n "" PO-Revisiedatum: 2012-12-05 14: 17-0500 \ n "" Laatste vertaler: Tom McFarlin \ n "" Taal-Team: Tom McFarlin \ n "" Taal: en_US \ n "" MIME -Version: 1.0 \ n "" Inhoudstype: text / plain; charset = UTF-8 \ n "" Content-Transfer-Encoding: 8bit \ n "" X-Poedit-KeywordsList: __; _ e \ n "" X -Poedit-Basepath:. \ N "" X-Poedit-SourceCharset: utf-8 \ n "" X-Generator: Poedit 1.5.4 \ n "" X-Poedit-SearchPath-0: ... \ n "
Het is duidelijk dat je dit wilt aanpassen aan je behoeften, maar je krijgt het algemene idee. Eenmaal klaar, zorg ervoor dat je een kopie van POEdit neemt, want we zullen dit programma gebruiken om de MO-bestanden te genereren die worden gebruikt voor lokalisatie.
We gaan een object-georiënteerde benadering hanteren voor het bouwen van onze plug-in, dus laten we verder gaan en de klasse uitpluizen die zal dienen als de kern van onze plug-in.
Voor deze plug-in moeten we de headerdefinitie, een constructor, drie functies en een helper-methode bieden. Makkelijk genoeg, toch?
We zullen werken aan het invullen van deze functies in dit artikel, maar ga door en bekijk de opmerkingen over de code, zodat u een duidelijk beeld hebt van waar we naar toe gaan.
De constructor instellen
Het eerste dat we moeten doen is de constructeur voorbereiden. Bedenk dat dit deel van de klasse verantwoordelijk is voor het initialiseren van de plug-in, het instellen van lokalisatie-informatie en het specificeren van eventuele hooks.
Aangezien we de benodigde functies al hebben uitgewerkt, zou het gemakkelijk moeten zijn om te volgen wat er aan de hand is, maar er zijn codeabels gegeven voor de volledigheid.
function __construct () // laad plugin tekst domein add_action ('init', array ($ this, 'plugin_textdomain')); / * Stel de filters in voor goedkeuring van reacties en het e-mailbericht voor reacties. * Voor de doeleinden van deze voorbeeldplug-in zijn dit dezelfde e-mail. * Hoewel je in een productieomgeving natuurlijk de typerende * 'Approve', Spam, 'en' Trash'-links wilt opnemen. * / // Moderatie add_filter ('comment_moderation_headers', array ($ this, 'email_headers') ); add_filter ('comment_moderation_subject', array ($ this, '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); // end constructorKortom, we hebben de functie gespecificeerd om het tekstdomein van de plug-in in te stellen voor lokalisatiedoeleinden en we hebben de haken opgegeven die we gaan gebruiken. Namelijk die voor moderatie van opmerkingen en opmerkingen over reacties.
Localization
Stel vervolgens de functie in waarmee de lokaliseringsbestanden van de plug-in worden opgehaald uit de
LANG
map die we hebben gemaakt bij het initialiseren van deze plug-in.Dit is een eenvoudige oproep met één regel die wordt aangeboden door de WordPress API.
/ ** * Laadt het plugin-tekstdomein voor vertaling * / public function plugin_textdomain () load_plugin_textdomain ('custom-comment-email-locale', false, dirname (plugin_basename (__FILE__)). '/ Lang'); // end plugin_textdomainDe belangrijkste bezigheid van deze specifieke functie is de sleutel die we hebben gebruikt om de locale van deze plug-in te identificeren. Voor degenen die onbekend zijn, moet dit uniek zijn, omdat vertalers hierdoor gelokaliseerde versies van strings kunnen aanbieden die we in de rest van deze plug-in zullen toevoegen.
Anders dan dat, lokalisatie is goed om te gaan.
filters
Voordat we de functionaliteit voor onze kennisgevings-e-mails daadwerkelijk implementeren, is er een importverschil dat we moeten maken. We moeten het vooral hebben over het verschil in moderatie-e-mails en in e-mails over meldingen.
Standaard vereist WordPress dat alle opmerkingen die zijn gekoppeld aan een e-mailadres dat niet wordt herkend door geautoriseerd, overblijven. Hierdoor wordt een e-mail verzonden naar de sitebeheerder (of auteur van het blogbericht) om de opmerking goed te keuren. Vanaf dat moment worden de opmerkingen automatisch goedgekeurd.
Dat gezegd hebbende, staat WordPress beheerders wel toe deze moderatiefunctie uit te schakelen en laat iedereen een reactie achter, ongeacht of ze dit al eerder hebben gedaan.
Ik breng dit naar voren omdat dit de manier beïnvloedt waarop we deze plug-in gaan ontwikkelen. Er zijn zes haken - drie voor moderatie en drie voor notificatie - die allemaal vergelijkbaar zijn omdat ze te maken hebben met de kopregel, onderwerpregel en bericht van een e-mail.
De haken zijn als volgt:
Om dingen eenvoudig te maken, zullen we onze drie functies aan iedereen koppelen zes plugins. Dit betekent dat gebruikers dezelfde e-mail zowel voor moderatie als voor aanmelding te zien krijgen.
In een productieomgeving is dit niet noodzakelijk ideaal; om echter te laten zien hoe je van deze hooks kunt profiteren en hoe je e-mails kunt aanpassen, werkt het goed.
Laten we eerst beginnen met de eenvoudige taak om de onderwerpregel van de e-mail bij te werken. Dit vereist niet dat we met enige opmaak werken (wat sowieso nogal lastig is in e-mailclients, zoals je snel zult zien :), en het is een eenvoudige functie die we eenvoudig kunnen aanpassen.
Laten we voor ons voorbeeld de onderwerpregel van de e-mail opnieuw schrijven om te lezen:
[Titel plaatsen] Hallo daar - Het lijkt erop dat je een nieuwe reactie hebt gekregen!
Hiertoe gaat u naar e-mail onderwerp
functie en werk deze vervolgens bij met het volgende. Opmerkingen over de code worden verstrekt voor de volledigheid, maar we zullen het een beetje meer bespreken, net na de functie:
/ ** * Maakt het aangepaste onderwerp voor de e-mail voor het melden van reacties. * * @param string $ subject De inhoud van het onderwerp * @param int $ comment_id De ID van de reactie waarvoor dit onderwerp wordt verzonden * @return De onderwerpregel voor de e-mail * @since 1.0 * / function email_subject ($ subject , $ comment_id) // Maak de onderwerpregel in de volgende indeling: "[Titel plaatsen] Hé daar - Lijkt erop dat je een nieuwe reactie hebt gekregen!" $ subject = __ ("[", 'custom-comment-email-locale'). $ this-> get_post_title ($ comment_id). __ ("]", 'custom-comment-email-locale'); $ subject. = ""; $ subject. = __ ("Hey daar - Het lijkt erop dat je een nieuwe reactie hebt gekregen!", 'custom-comment-email-locale'); return $ subject; // end filter_method_name
Merk op dat de functie twee parameters accepteert: onderwerp en opmerking-ID. Het onderwerp is de originele subjet die wordt doorgegeven aan de functie. Dit is handig als u tekst wilt toevoegen aan of toevoegen aan de onderwerpregel, maar we gaan er zelf een schrijven zodat deze daadwerkelijk wordt overschreven.
De commentaarteken-ID is handig omdat het ons in staat stelt om een verscheidenheid aan informatie op te halen, zoals het bericht, de titel van het bericht, enzovoort, eenvoudigweg door het gebruik van de opmerking-ID.
In feite is dit de manier waarop we de berichttitel ophalen voor de onderwerpregel. Merk echter op dat we in onze post een oproep doen $ this-> get_post_title ($ comment_id)
.
Dit is de hulpfunctie die we hebben gedefinieerd om ons te helpen gemakkelijk de titel van het bericht te verkrijgen die is gekoppeld aan de gegeven opmerking. We hebben het samengevoegd in een helperfunctie zodat we het later in de plug-in kunnen gebruiken.
De helperfunctie is eenvoudig:
/ ** * Hiermee wordt de ID opgehaald van het bericht dat aan deze opmerking is gekoppeld. * * @param int $ comment_id De ID van de opmerking die we gebruiken om de berichttitel te krijgen * @return string De titel van het bericht van de reactie * @since 1.0 * / private function get_post_title ($ comment_id) $ comment = get_comment ($ comment_id); retourneer get_the_title ($ comment-> comment_post_ID); // end get_post_title
Duidelijk, toch? Krijg een verwijzing naar het opmerkingobject door de opgegeven ID en retourneer vervolgens de titel van het bericht dat is gekoppeld aan de bericht-ID van de gegeven reactie.
Op dit punt, voel je vrij om je code te testen. Ervan uitgaande dat u de stappen in het eerste artikel hebt gevolgd, moet u een ontwikkelingsomgeving instellen waarmee e-mails naar uw Postvak IN worden verzonden.
Activeer de plug-in, laat een reactie achter op de post en je zou een nieuwe onderwerpregel moeten zien.
Nette, he?
Vervolgens zijn we klaar om te beginnen met het instellen van de e-mailtekst. In onze plug-in laten we de e-mail bevatten met de volgende:
We bieden ook een aantal opmaakmodi om te laten zien hoe we het uiterlijk van een e-mail gemakkelijk kunnen aanpassen.
Dus zoek de email_text
functie en omvatten de volgende:
/ ** * Maakt een aangepaste, opgemaakte e-mail die wordt gebruikt om gebruikers op de hoogte te stellen dat ze een nieuwe opmerking hebben. * * @param string $ message De inhoud van de e-mail * @param int $ comment_id De ID van de opmerking die wordt achtergelaten * @return De aangepaste inhoud van het lichaam van de e-mail * @since 1.0 * / function email_text ($ message, $ comment_id) // Haal de reactie op $ comment = get_comment ($ comment_id); // Definieer de kop $ message = ''; $ message. = __ ('Comment For', 'custom-comment-email-locale'); $ message. = $ this-> get_post_title ($ comment_id); $ bericht. = '
'; $ bericht. = ''; $ bericht. = ''; // Bepaal wat voor soort opmerking dit is: $ comment_type = __ ('normale opmerking', 'aangepaste reactie-e-mail-locale'); if ("! = $ comment-> comment_type) $ comment_type = __ ('trackback of een pingback.', 'custom-comment-email-locale'); // end if // En stel het footer $ -bericht in. = ''. __ ('De oorspronkelijke inhoud van deze e-mail luidde:', 'aangepast commentaar-e-mail-locale'). '
'; $ bericht. = $ commentaar-> comment_content; $ bericht. = ''; $ message. = __ ('Deze opmerking is achtergelaten door', 'custom-comment-email-locale'). 'comment_author_email. '">'. $ reactie-> comment_author_email. '.'; $ message. = __ ('|', 'custom-comment-email-locale'); $ message. = __ ('This is a', 'custom-comment-email-locale'). ''. $ comment_type. '.'; $ bericht. = ''; return $ bericht; // einde email_text
Hoewel de opmerkingen in de code relatief duidelijk moeten zijn, houd er rekening mee dat we het volgende doen:
Merk ook op dat we enkele inline stijlen hebben geschreven. Ik ga ervan uit dat u Gmail als uw e-mailclient zult gebruiken bij het testen van deze e-mails; Elke e-mailclient verwerkt stijlen echter anders, dus zorg ervoor dat u dit diagram nakijkt als u dit in sommige van uw productieampliant-projecten doet..
Als u klaar bent, start u een nieuwe e-mail en ziet u ongeveer het volgende:
Oops! dat is niet wat we willen. Gelukkig is dit een eenvoudige oplossing en het vereist nog een regel code in de plug-in.
Om gestileerde, op HTML gebaseerde berichten met behulp van WordPress te verzenden, moeten we de kopteksten van de e-mail correct instellen. Om dit te doen, werkt u het email_headers
functie om er zo uit te zien:
/ ** * Hiermee stelt u de berichtkoppen in voor de e-mail die wordt verzonden voor de e-mail voor het melden van reacties. * * @since 1.0 * / function email_headers () add_filter ('wp_mail_content_type', create_function (", 'return" text / html ";')); // end email_headers
Dit informeert de e-mailclient om de inhoud als HTML weer te geven. Als u wilt toestaan dat u dit goed hebt gedaan, ziet u ongeveer het volgende:
Veel beter!
Het is duidelijk dat we alleen maar hebben gekeken hoe krachtig het aanpassen van je op WordPress-gebaseerde e-mails kan zijn vooral als je de tijd neemt om leuke markeringen, uitgebreide stijlen, enzovoort te genereren.
Naar mijn mening is het belangrijkste om te begrijpen hoe je kunt inhaken op de filters die worden aangeboden waarmee we al het bovenstaande kunnen doen.
Hopelijk heeft deze serie voldoende informatie opgeleverd om aan de slag te gaan. Vergeet niet om de plug-in op GitHub te bekijken en veel succes met die aangepaste e-mails!