Nel primo post di questa serie, abbiamo esaminato la varietà di email che WordPress invia a seconda di come viene utilizzata. Abbiamo anche discusso di come è possibile personalizzare le e-mail che WordPress invia senza dover in realtà esternalizzare la funzionalità a servizi di terze parti.
Abbiamo anche rivisto i vari filtri che WordPress fornisce per l'aggancio nel sistema al fine di personalizzare le nostre e-mail; tuttavia, poiché il numero di email inviate da WordPress è così ampio, abbiamo deciso di dare un'occhiata focalizzata alla moderazione dei commenti e alle e-mail di notifica dei commenti.
Quindi, in questo articolo, creeremo un plug-in che ci consentirà di personalizzare completamente l'aspetto delle e-mail specifiche dei commenti. In definitiva, questo dovrebbe darti un'idea di come funzionano gli hook disponibili, cosa è necessario per personalizzare le e-mail e come puoi sfruttare l'API di WordPress per personalizzare il contenuto delle tue e-mail.
Poiché lo scopo di questo articolo è di servire come tutorial per la creazione di un plug-in, andiamo avanti e cominciamo con i passaggi pratici necessari per iniziare.
Sebbene questo intero progetto sia disponibile su GitHub come riferimento, consiglio vivamente di seguire i passaggi di questo articolo prima scaricare il plug-in funzionante. Dopotutto, ha lo scopo di fornire un riferimento per quando le cose vanno male - non per aiutarti a saltare alla conclusione.
La prima cosa che dobbiamo fare è impostare una directory per i nostri plugin. Possiamo farlo creando un custom-commento-email
directory in wp-content / plugins
.
Quindi, crea le seguenti directory e file:
lang /
lang / plugin.po
plugin.php
Si noti che il Lang
la directory verrà utilizzata per conservare i nostri file di localizzazione affinché altri possano fornire traduzioni.
Nel plugin.po
aggiungi il seguente testo:
msgid "" msgstr "" "Versione ID progetto: Email commento personalizzato \ n" "Segnala-Msgid-Bugs-To: \ n" "POT-Creazione data: 2012-12-05 14: 17-0500 \ n "" PO-Revision-Date: 2012-12-05 14: 17-0500 \ n "" Last-Translator: Tom McFarlin \ n "" Lingua-Team: Tom McFarlin \ n "" Lingua: en_US \ n "" MIME -Version: 1.0 \ n "" Content-Type: 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 "
Ovviamente, ti consigliamo di personalizzarlo per soddisfare le tue esigenze, ma ottieni l'idea generale. Una volta fatto, assicurati di prendere una copia di POEdit poiché useremo questo programma per generare i file MO che sono usati per la localizzazione.
Adotteremo un approccio orientato agli oggetti per creare il nostro plug-in, quindi andiamo avanti e annulliamo la classe che servirà da nucleo del nostro plug-in.
Per questo plugin, dobbiamo fornire la definizione dell'intestazione, un costruttore, tre funzioni e un metodo di supporto. Abbastanza facile, giusto?
Lavoreremo alla compilazione di queste funzioni in questo articolo, ma procedi e rivedi i commenti del codice in modo da avere una chiara comprensione di dove siamo diretti.
Impostazione del costruttore
La prima cosa che dobbiamo fare è preparare il costruttore. Ricorda che questa parte della classe è responsabile per l'inizializzazione del plug-in, la configurazione delle informazioni di localizzazione e la specifica di qualsiasi hook.
Dato che abbiamo già soppresso le funzioni necessarie, dovrebbe essere facile seguire ciò che sta accadendo, ma i commenti sul codice sono stati forniti per completezza.
function __construct () // Carica il dominio del testo plugin add_action ('init', array ($ this, 'plugin_textdomain')); / * Imposta i filtri per l'approvazione dei commenti e l'e-mail di notifica dei commenti. * Per gli scopi di questo plugin di esempio, questi saranno la stessa email. * Sebbene in un ambiente di produzione, dovresti naturalmente includere i tipici collegamenti * Approve, "Spam" e "Cestino". * / // Moderazione 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); // Notifiche 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); // costruttore finaleIn breve, abbiamo specificato la funzione per impostare il dominio del plugin per scopi di localizzazione e abbiamo specificato i ganci che utilizzeremo. Vale a dire, quelli per la moderazione dei commenti e la notifica dei commenti.
Localizzazione
Successivamente, definiamo la funzione che recupererà i file di localizzazione del plugin dal
Lang
directory che abbiamo creato durante l'inizializzazione di questo plugin.Questa è una semplice chiamata a linea singola fornita dall'API di WordPress.
/ ** * Carica il dominio del testo del plugin per la traduzione * / public function plugin_textdomain () load_plugin_textdomain ('custom-comment-email-locale', false, dirname (plugin_basename (__FILE__)). '/ Lang'); // end plugin_textdomainLa chiave da prendere da questa particolare funzione è la chiave che abbiamo usato per identificare le impostazioni locali di questo plugin. Per coloro che non hanno familiarità, questo deve essere unico in quanto è ciò che permetterà ai traduttori di fornire versioni localizzate di stringhe che verranno aggiunte nel resto del plug-in..
Oltre a questo, la localizzazione è buona.
filtri
Prima di implementare effettivamente la funzionalità per le nostre e-mail di notifica, c'è una distinzione all'importazione che dobbiamo fare. Nello specifico, dobbiamo parlare della differenza nelle e-mail di moderazione e nelle e-mail di notifica.
Per impostazione predefinita, WordPress richiede che ogni commento lasciato associato a un indirizzo email non riconosciuto da autorizzato. Ciò consente di inviare un'email all'amministratore del sito (o all'autore del post del blog) per approvare il commento. Da quel momento in poi, i commenti verranno automaticamente approvati.
Detto questo, WordPress consente agli amministratori di disabilitare questa funzionalità di moderazione e consentire a chiunque di lasciare un commento indipendentemente dal fatto che lo abbia fatto in precedenza.
Ne parlo perché questo influenza il modo in cui svilupperemo questo plugin. Ci sono sei ganci, tre per la moderazione e tre per la notifica, tutti simili nel senso che sono correlati all'intestazione di una email, alla riga dell'oggetto e al messaggio.
I ganci sono i seguenti:
Per semplificare le cose, assoceremo le nostre tre funzioni a tutte sei plugins. Ciò significa che gli utenti vedranno la stessa email per la moderazione e per la notifica.
In un ambiente di produzione, questo non è necessariamente l'ideale; tuttavia, per dimostrare come sfruttare questi hook e come personalizzare le email, funziona bene.
Innanzitutto, iniziamo con il semplice compito di aggiornare l'oggetto della mail. Questo non richiede che lavoriamo con qualsiasi markup (che è un po 'un problema nei client di posta elettronica comunque, come vedrai presto :), ed è una funzione semplice che possiamo facilmente personalizzare.
Per il nostro esempio, riscriviamo la riga dell'oggetto dell'email per leggere:
[Post Title] Hey There - Sembra che tu abbia un nuovo commento!
Per fare ciò, individuare il oggetto dell'email
funzione e quindi aggiornarlo per includere quanto segue. I commenti sul codice sono forniti per completezza, ma ne discuteremo un po 'di più subito dopo la funzione:
/ ** * Crea l'oggetto personalizzato per l'e-mail di notifica del commento. * * @param string $ subject Il contenuto dell'oggetto * @param int $ comment_id L'ID del commento per il quale viene inviato questo argomento * @return La riga dell'oggetto per l'e-mail * @since 1.0 * / function email_subject ($ subject , $ comment_id) // Crea la riga dell'oggetto nel seguente formato: "[Post Title] Hey There - Sembra che tu abbia un nuovo commento!" $ subject = __ ("[", "custom-comment-email-locale"). $ this-> get_post_title ($ comment_id). __ ("]", 'custom-comment-email-locale'); $ subject. = ""; $ subject. = __ ("Hey there - Sembra che tu abbia un nuovo commento!", "custom-comment-email-locale"); return $ subject; // end filter_method_name
Si noti che la funzione accetta due parametri: oggetto e ID commento. Il soggetto è il soggetto originale che viene passato alla funzione. Questo è utile se vuoi anteporre o aggiungere testo alla riga dell'oggetto, ma lo scriveremo da parte nostra in modo che venga sovrascritto.
Il comment_ID è utile perché ci permetterà di recuperare una varietà di informazioni come il post, il titolo del post e così via semplicemente dall'uso dell'ID commento.
In effetti, è così che recuperiamo il titolo del post per la riga dell'oggetto. Si noti, tuttavia, che nel nostro post ci stiamo chiamando $ this-> get_post_title ($ comment_id)
.
Questa è la funzione di supporto che abbiamo definito per aiutarci a recuperare facilmente il titolo del post associato al commento dato. L'abbiamo trasformato in una funzione di supporto in modo che possiamo utilizzarla in un secondo momento nel plug-in.
La funzione di aiuto è semplice:
/ ** * Recupera l'ID del post associato a questo commento. * * @param int $ comment_id L'ID del commento che stiamo usando per ottenere il titolo del post * @return string Il titolo del post del commento * @since 1.0 * / private function get_post_title ($ comment_id) $ comment = get_comment ($ comment_id); return get_the_title ($ comment-> comment_post_ID); // end get_post_title
Chiaro, giusto? Ottieni un riferimento all'oggetto del commento dall'ID specificato, quindi restituisci il titolo del post associato all'ID del post del commento specificato.
A questo punto, sentiti libero di testare il tuo codice. Supponendo di aver seguito i passaggi del primo articolo, dovresti avere una configurazione dell'ambiente di sviluppo che sta inviando email alla tua casella di posta.
Attiva il plugin, lascia un commento sul post e dovresti vedere una nuova riga dell'oggetto.
Pulito, eh?
Successivamente, siamo pronti per iniziare a impostare effettivamente il testo dell'email. Nel nostro plug-in, diciamo che l'e-mail include il seguente:
Forniremo anche alcuni stili per dimostrare come possiamo facilmente personalizzare l'aspetto di un'email.
Quindi individuare il email_text
funzione e include quanto segue:
/ ** * Crea un'e-mail personalizzata in stile utilizzata per notificare agli utenti che hanno un nuovo commento. * * @param stringa $ messaggio Il contenuto dell'email * @param int $ comment_id L'ID del commento rimasto * @return Il contenuto del corpo personalizzato dell'email * @since 1.0 * / function email_text ($ message, $ comment_id) // Recupera il commento $ comment = get_comment ($ comment_id); // Definisci l'intestazione $ message = ''; $ message. = __ ('Comment For', 'custom-comment-email-locale'); $ message. = $ this-> get_post_title ($ comment_id); $ message. = '
'; $ message. = ''; $ message. = ''; // Determina quale tipo di commento è questo: $ comment_type = __ ('commento normale.', 'Custom-comment-email-locale'); if ("! = $ comment-> comment_type) $ comment_type = __ ('trackback o pingback.', 'custom-comment-email-locale'); // end if // E imposta il messaggio $ footer. = ''. __ ('Il contenuto originale di questa e-mail è:', 'custom-comment-email-locale'). '
'; $ message. = $ comment-> comment_content; $ message. = ''; $ message. = __ ('Questo commento è stato lasciato da', 'custom-comment-email-locale'). 'commento_autore_email. '">'. $ comment-> comment_author_email. '.'; $ message. = __ ('|', 'custom-comment-email-locale'); $ message. = __ ('Questo è un', 'custom-comment-email-locale'). ''. $ comment_type. '.'; $ message. = ''; return $ message; // fine email_text
Anche se i commenti sul codice dovrebbero essere relativamente chiari, tieni presente che stiamo facendo quanto segue:
Nota anche che abbiamo scritto alcuni stili in linea. Suppongo che tu stia utilizzando Gmail come tuo client di posta elettronica durante il test di queste email; tuttavia, ogni client di posta gestisce gli stili in modo diverso, quindi assicurati di rivedere questo grafico se finisci per farlo in alcuni dei tuoi progetti pronti per la produzione.
Una volta terminato, attiva un'altra email e dovresti vedere qualcosa di simile al seguente:
Spiacenti! Quello è non quello che vogliamo. Fortunatamente, questa è una soluzione semplice e richiede un'ulteriore riga di codice nel plugin.
Per inviare messaggi in stile basati su HTML con WordPress, è necessario impostare correttamente le intestazioni dell'e-mail. Per fare ciò, aggiorna il email_headers
funzione per assomigliare a questo:
/ ** * Imposta le intestazioni per l'email inviata per l'e-mail di notifica dei commenti. * * @since 1.0 * / function email_headers () add_filter ('wp_mail_content_type', create_function (", 'return" text / html ";')); // end email_headers
Questo informa il client di posta elettronica per il rendering del contenuto in formato HTML. Se hai fatto bene, dovresti vedere qualcosa di simile al seguente:
Molto meglio!
Ovviamente, abbiamo solo scalfito la superficie di quanto sia potente la personalizzazione delle e-mail basate su WordPress particolarmente se ti prendi il tempo di generare qualche bella annotazione, stili elaborati e così via.
A mio parere, la cosa più importante da capire è come agganciare i filtri forniti che ci permettono di fare tutto quanto sopra.
Spero che questa serie abbia fornito informazioni sufficienti per iniziare. Ricordati di controllare il plugin su GitHub e buona fortuna con quelle e-mail personalizzate!