Oggi vediamo come inviare un’email automatica di notifica agli autori dopo la pubblicazione di un articolo su WordPress.
Non utilizzeremo nessun plugin, ma solo uno script in php e alcune funzioni e hook di wordpress.

In quali casi è utile mandare un’email di notifica?

Alcuni esempi pratici
– Gli autori salvano i post come ‘in attesa di revisione‘ e vogliamo mandare una notifica alla pubblicazione degli articoli.
– Gli utenti creano degli annunci che vengono salvati in bozza. Vogliamo mandare un’email una volta che l’annuncio è stato verificato e pubblicato.

Che funzioni utilizziamo

Utilizzeremo add_meta_box() per creare un campo nell’editor di wordpress, varie funzioni per ricavare le informazioni da inviare nell’email: ed esempio get_the_author_meta(), get_permalink().

La funzione più importante è però quella che spedisce l’email: wp_mail() .

Parametri di wp_mail:

$to L'indirizzo email del destinatario
$subject L'oggetto dell'email
$message Il testo dell'email
$headers heder da spedire assieme all'email

Quali hook ci servono

L’action hook che utilizzeremo è publish_post. Questo hook permette di inserire del codice php nel processo che si innesca dopo la pubblicazione di un articolo. In realtà dopo alcune prove si può notare che l’hook interviene anche dopo ogni aggiornamento del post stesso, non solo dopo la pubblicazione.

Per evitare quindi di mandare ripetutamente la stessa email, aggiungiamo un check box nella sidebar dell’editor. Se spuntato il checkbox, verrà inserito il valore ‘si’ nell’array $_POST[ ‘notifica’ ]. Useremo quindi la sua presenza come condizione per mandare l’email.

notifica-pubblicazione-tramite-email

Il codice

/** metabox **/

add_action( 'admin_init', 'isw_nuovo_metabox' );
    function isw_nuovo_metabox() {
        add_meta_box( 'isw_notifica_email',         //id
                     'Notifica Email',                     //titolo
                     'isw_checkbox_notifica_meta_box',  //nome funzione callback***
                     'post',  //post type
                     'side',        // nella sidebar
                     'high' );
        }

function isw_checkbox_notifica_meta_box( $post )
    {
    ?>
    <table>
        <td style="width: 100%">Notifica pubblicazione via Email</td>
            <td><input type="checkbox" size="30" name="notifica" value="si" /></td>
        </tr>
    </table>
    <?php
    } 

function isw_notifica_pubblicazione_post( $id, $post )
{
    if(  $_POST[ 'notifica' ] == 'si' )
    {

        $author    = $post->post_author;
        $name = get_the_author_meta( 'display_name', $author );
        $email   = get_the_author_meta( 'user_email', $author );
        $title = $post->post_title;
        $permalink = get_permalink( $id );

        $to[] = $email; 

        $subject = 'Pubblicazione articolo: ' . $title ;
        $message = 'Complimenti ' . $name . ' il tuo articolo &egrave; stato pubblicato';
        $message .= '<br />';
        $message .= 'link: ' .  $permalink ;

        $email_admin = get_option( 'admin_email' );
        $headers[] = 'From: Amministratore <' . $email_admin . '>' . "\r\n";

        //cambiamo il content type a text/html
        function isw_content_type_email(){
            return "text/html";
        }
        add_filter( 'wp_mail_content_type','isw_content_type_email' );

        wp_mail( $to, $subject, $message, $headers ) ;

    }

}
add_action( 'publish_post', 'isw_notifica_pubblicazione_post', 10, 2 );

Estendere il codice ai custom post type / post personalizzati

Il codice di sopra può essere facilmente adattato ai post personalizzati. È necessario specificare il custom post nella funzione add_metabox. La stessa funzione che abbiamo creato per spedire l’email deve essere poi associata a un hook specifico creato secondo lo schema

publish_{post_type}

dove al posto di post_type, inseriamo in nome del post personalizzato.

Approfondimenti

Esiste un sistema diverso per impostare il problema.

Per un post o pagina creati su WordpPress esistono i seguenti stati:

  • new – Quando non esiste nessuno stato precedente (quando clicchiamo su salva post).
  • publish – (Pubblicazione di un post o una pagina).
  • pending – (Post in attesa di revisione).
  • draft – (Bozza).
  • auto-draft – (Post creato senza contenuto in seguito a bozza automatica).
  • future – (Programmazione del post programmata).
  • private – (Post privato).
  • inherit – (Il Post è una revisione o un allegato).
  • trash – (Il post è nel cestino)

Per ogni transazione da uno stato ad un altro esiste un hook che può essere ricavato con questa formula

{old_status}_to_{new_status}

Quindi l’evento di pubblicazione di un post che prima era salvato come bozza richiama l’hook draft_to_publish.
Per approfondimenti si può vedere la pagina specifica del codex Post status transition.


  inStileWeb.com
blog comments powered by Disqus