Inviare email di amministrazione a più indirizzi email
Esiste un hook che mi permetta di inviare le notifiche email predefinite dell'amministratore a più indirizzi email?
Speravo di poter creare un array:
$adminEmails = array('me1@example.com', 'me2@example.com');
E fare in modo che tutte le email di amministrazione (come le notifiche per nuovi utenti) vengano inviate a $adminEmails
È possibile?
Questo può essere fatto filtrando la funzione wp_mail
, verificando se to
è impostato sull'email dell'amministratore, e in tal caso, aggiungere i tuoi indirizzi email aggiuntivi, e restituire gli argomenti a wp_mail
add_filter( 'wp_mail', 'my_custom_to_admin_emails' );
/**
* Filtra la funzione WP_Mail per aggiungere più email di amministrazione
*
*
*
* @param array $args Un array compatto degli argomenti di wp_mail(), inclusi i valori "to" email,
* oggetto, messaggio, intestazioni e allegati.
*
* @return array
*/
function my_custom_to_admin_emails( $args ) {
// Se "to" non è impostato (chissà perché non lo sarebbe) restituisci args
if( ! isset($args['to']) || empty($args['to']) ) return $args;
// Se TO è un array di email, significa che probabilmente non è un'email di amministrazione
if( is_array( $args['to'] ) ) return $args;
$admin_email = get_option( 'admin_email' );
// Controlla se l'email dell'amministratore è presente nella stringa, poiché TO potrebbe essere formattato come 'Amministratore <admin@dominio.com>',
// e se controlliamo specificamente se è solo l'email, potremmo perdere alcune email di amministrazione.
if( strpos( $args['to'], $admin_email ) !== FALSE ){
// Imposta la chiave TO dell'array uguale all'email dell'amministratore esistente, più eventuali email aggiuntive
//
// Tutti gli indirizzi email forniti a wp_mail() come parametro $to devono conformarsi a RFC 2822. Alcuni esempi validi:
// utente@esempio.com
// Utente <utente@esempio.com>
$args['to'] = array( $args['to'], 'altro@dominio.com', 'Admin4 <admin4@dominio.com>' );
}
return $args;
}
Restituiamo TO come un array, poiché wp_mail
gestirà l'array e lo esploderà secondo necessità per inviare l'email

Una cosa a cui fare attenzione: se richiedi il reset della password e la tua email è la stessa dell'opzione admin_email
, anche quelle altre email riceveranno quella comunicazione... tienilo a mente, controlla solo il DESTINATARIO quando le email vengono inviate, non verifica se dovrebbe essere un'email amministrativa (perché al momento non so nemmeno come farlo)

Grazie @shanebp - ma non funziona. Si limitano a unirsi in una singola stringa nelle opzioni, quindi tenta di inviare a: me1@example.comme2@example.com

Che peccato... Quindi, per le sole email degli amministratori riguardo ai nuovi utenti, la funzione è pluggable. Potresti crearne una versione che invia a più email predefinite riguardo agli amministratori. http://codex.wordpress.org/Function_Reference/wp_new_user_notification

Grazie shanebp - penso che quello che suggerisci sia effettivamente la soluzione migliore per le mie esigenze.

Ecco la mia soluzione, utilizza il filtro update_option_*, credo sia la strada giusta da percorrere qui. Aggiungi questo a un plugin o al file functions.php del tuo tema, e poi potrai inserire in sicurezza email amministrative separate da virgola nella schermata Impostazioni->Generale.
add_filter('pre_update_option_admin_email','sanitize_multiple_emails',10,2);
function sanitize_multiple_emails($value,$oldValue)
{
// se c'è qualcosa di strano, lascia che WordPress proceda normalmente
if(!isset($_POST["admin_email"]))
return $value;
$result = "";
$emails = explode(",",$_POST["admin_email"]);
foreach($emails as $email)
{
$email = trim($email);
$email = sanitize_email( $email );
// ancora, qualcosa non va? lascia che WordPress continui
if(!is_email($email))
return $value;
$result .= $email.",";
}
if(strlen($result == ""))
return $value;
$result = substr($result,0,-1);
return $result;
}
