Infocurci - programmatore Php Roma
Infocurci - programmatore Php Roma
"faster than 98% of all tested websites" (tools.pingdom.com) - 100/100 Google PageSpeed Insights - Benvenuti :)

Cms / framework : Come aggiungere un filtro in Wordpress

La funzione add_filter() consente di estendere facilmente il comportamento di Wordpress, sfruttando una vasta gamma di eventi ai quali agganciare il codice personalizzato. Sviluppiamo oggi una funzione che aggiunge un destinatario alle email di avviso nuovo commento.

Cms / framework

Wordpress dispone di un interessante modello di gestione degli eventi che consente di estendere in maniera rapida e potenzialmente sterminata il codice di base. Oltre allo sviluppo di plugin, non è male sfruttare questi eventi per la risoluzione di piccoli problemi pratici. In questo esempio vedremo come inviare l'email di avviso di nuovo commento ad un ulteriore destinatario, oltre a quello già configurato nel pannello generale di Wordpress. Si tratta di una funzione che può tornare molto utile a chi decide di delegare la gestione dei contenuti ad una persona diversa dall'amministratore del sistema.

La funzione che invia i commenti di avviso email è contenuta nel file wp-includes/pluggable.php. Questo file contiene funzioni base che possono essere sovrascritte da altre funzioni, chiamate con lo stesso nome e contenute nei nostri template/plugin. Tuttavia per l'esempio di oggi sarà sufficiente sfruttare l'evento "apply_filters":

$emails = apply_filters( 'comment_moderation_recipients', $emails, $comment_id );

questa riga (contenuta all'interno della funzione wp_notify_moderator) ci informa che Wordpress richiama in questo punto tutte le funzioni che si agganciano all'evento "comment_moderation_recipients".

Apriamo il file functions.php del nostro template e creiamo una funzione che aggiunge, ai destinatari già configurati, un altro indirizzo email:

add_filter('comment_moderation_recipients','headers_recipients',10,1);

function headers_recipients($emails){
    $emails[] = 'info@prova.com';
    return  $emails;
}

La funzione add_filter riceve questi parametri:

  1. il nome dell'evento a cui va agganciata ("comment_moderation_recipients").
  2. Il nome della funzione che gestirà il nostro codice personalizzato ("headers_recipients", ovviamente possiamo chiamarla come vogliamo)
  3. Un numero che indica la priorità con cui questa funzione andrà eseguita, nel caso ce ne fossero altre che si agganceranno allo stesso evento (con molta probabilità nella vostra installazione ci sarà soltanto questa, possiamo usare un numero arbitrario)
  4. Il quarto parametro indica il numero delle variabili. La funzione apply_filters, se avete fatto caso, contiene due variabili: $emails e $comment_id. Non è detto che la nostra funzione personalizzata avrà bisogno di usare tutte queste variabili, infatti a noi serve soltanto la prima, $emails (un array di indirizzi destinatari) per poter aggiungere la nostra casella.
    Il $comment_id non ci serve, ci servirebbe se volessimo creare una gestione più avanzata e "smistare" l'email di avviso commento a destinatari diversi, a seconda della categoria. In quel caso potremmo eseguire una query che, dall'id commento, ci restituirebbe la categoria e associare un'email diversa.. ma per questo esempio non è necessario. Quindi ci serve 1 solo argomento, e indichiamo il numero 1 come quarto parametro.

La funzione headers_recipients credo si commenti da sola, aggiunge un indirizzo email e ritorna il nuovo array. E'  fondamentale, quando si lavora con apply_filters(), che add_filter() ritorni sempre un valore.

Inseriamo un commento nel blog cosi da verificare l'invio dell'email alla casella che avevamo configurato.