Inviare email di amministrazione a più indirizzi email

19 dic 2014, 01:35:12
Visualizzazioni: 14.2K
Voti: 5

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?

1
Commenti

C'è una discussione qui - sembra che non ci sia una soluzione: https://core.trac.wordpress.org/ticket/10726

Pat Gilmour Pat Gilmour
19 dic 2014 01:42:35
Tutte le risposte alla domanda 3
1

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

16 mar 2016 23:24:51
Commenti

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)

sMyles sMyles
17 mar 2016 02:43:01
5

Prova questo:

update_option( 'admin_email', 'me1@example.com, me2@example.com' );

Nota che il valore è una stringa; apici di apertura e chiusura soltanto!

19 dic 2014 02:23:21
Commenti

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

Pat Gilmour Pat Gilmour
19 dic 2014 04:30:34

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

shanebp shanebp
19 dic 2014 17:17:48

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

Pat Gilmour Pat Gilmour
20 dic 2014 01:24:28

@PatGilmour Allora per favore segnalalo come soluzione.

kaiser kaiser
17 mar 2016 02:21:28

@PatGilmour Beh, se la risposta originale non è corretta probabilmente non dovrebbe essere segnalata come corretta. Consiglierei di segnalare come corretta la risposta di sMyles oppure di aggiornare la risposta di shanebp con la soluzione proposta nei commenti.

Simon East Simon East
12 gen 2017 03:52:33
0

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;
}
1 apr 2017 00:22:14