Creazione di e-mail di commento personalizzate creazione di un plug-in

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.


Preparazione del plugin

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.

Imposta la directory

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.

Il file di localizzazione

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.

Il file del plugin

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 finale

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

La 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:

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

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.

Il soggetto

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

Una piccola funzione di supporto

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?

Il testo dell'email

Successivamente, siamo pronti per iniziare a impostare effettivamente il testo dell'email. Nel nostro plug-in, diciamo che l'e-mail include il seguente:

  • Un'intestazione che legge "Comment For [Post Title]"
  • Un'area per il contenuto che recita "I contenuti originali di questa e-mail hanno letto:" dopo di che includeremo i commenti originali
  • Un semplice piè di pagina che denota se si tratta di un normale commento o di un trackback o di un pingback e che include l'indirizzo email dell'autore del commento.

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

'. __ ('Il contenuto originale di questa e-mail è:', 'custom-comment-email-locale'). '

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

  • Recupero del commento
  • Configurare un'intestazione per l'email (dove recuperiamo anche il titolo del post usando la nostra funzione helper)
  • Scrivere il commento del codice originale
  • Definizione di un piè di pagina che mostra il tipo di commento e l'autore del commento

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.

Impostazione delle intestazioni

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!


Conclusione

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!


risorse

  • Creazione di e-mail di commento personalizzate - Parte 1: Comprensione dell'API
  • Guida del monitor Campaign ai CSS nelle email
  • Plug-in e-mail di commento personalizzato