Trimite email-uri de administrare către mai multe adrese de email

19 dec. 2014, 01:35:12
Vizualizări: 14.2K
Voturi: 5

Există vreun hook care să-mi permită să trimit email-uri către mai multe adrese pentru notificările implicite de administrare?

Mă gândeam să creez un array:

$adminEmails = array('me1@example.com', 'me2@example.com');

Apoi să trimit toate email-urile de administrare (cum ar fi notificările pentru utilizatori noi) către $adminEmails

Este posibil?

1
Comentarii

Există o discuție aici - nu pare să existe o soluție: https://core.trac.wordpress.org/ticket/10726

Pat Gilmour Pat Gilmour
19 dec. 2014 01:42:35
Toate răspunsurile la întrebare 3
1

Aceasta poate fi realizată prin filtrarea funcției wp_mail, verificând dacă to este setat la adresa de email a administratorului și, dacă da, adăugând adiționalele tale adrese de email, apoi returnând argumentele înapoi la wp_mail

add_filter( 'wp_mail', 'my_custom_to_admin_emails' );

/**
 * Filtrează funcția WP_Mail pentru a adăuga mai multe adrese de email pentru administrator
 *
 *
 *
 * @param array $args Un array compact de argumente ale funcției wp_mail(), inclusiv valorile "to" (către),
 *                    subject (subiect), message (mesaj), headers (anteturi) și attachments (atașamente).
 *
 * @return array
 */
function my_custom_to_admin_emails( $args ) {
    // Dacă 'to' nu este setat (cine știe de ce nu ar fi), returnează argumentele
    if( ! isset($args['to']) || empty($args['to']) ) return $args;

    // Dacă TO este un array de adrese de email, înseamnă că probabil nu este o adresă de admin
    if( is_array( $args['to'] ) ) return $args;

    $admin_email = get_option( 'admin_email' );

    // Verifică dacă adresa de email a administratorului este găsită în șir, deoarece TO ar putea fi formatat ca 'Administrator <admin@domain.com>',
    // iar dacă verificăm doar dacă este exact adresa de email, am putea rata unele adrese de admin.
    if( strpos( $args['to'], $admin_email ) !== FALSE ){
        // Setează cheia TO array egală cu adresa de email existentă a administratorului, plus orice alte adrese de email adiționale
        //
        // Toate adresele de email furnizate funcției wp_mail() ca parametru $to trebuie să respecte RFC 2822. Câteva exemple valide:
        // user@example.com
        // User <user@example.com>
        $args['to'] = array( $args['to'], 'another@domain.com', 'Admin4 <admin4@domain.com>' );
    }

    return $args;
}

Returnăm TO ca un array, deoarece wp_mail va gestiona array-ul și îl va despărți după necesitate pentru a trimite emailul

16 mar. 2016 23:24:51
Comentarii

Un lucru de care trebuie să fii atent, dacă soliciți resetarea parolei și adresa ta de email este aceeași cu opțiunea admin_email, acele alte email-uri vor primi și ele acel mesaj... doar ține minte acest lucru, sistemul verifică doar câmpul TO când sunt trimise email-urile, nu verifică dacă ar trebui să fie un email de administrare (deoarece momentan nu știu cum să fac asta)

sMyles sMyles
17 mar. 2016 02:43:01
5

Încearcă asta:

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

Reține că valoarea este un șir de caractere; folosește ghilimele de deschidere și închidere doar!

19 dec. 2014 02:23:21
Comentarii

Mulțumesc @shanebp - dar nu funcționează. Doar le unește într-un singur șir în opțiuni, așa că încearcă să trimită la: me1@example.comme2@example.com

Pat Gilmour Pat Gilmour
19 dec. 2014 04:30:34

Ce păcat... Deci, pentru emailurile administratorilor privind noii utilizatori, funcția este "pluggable". Așadar, ai putea crea o versiune care trimite la mai multe adrese de email hardcodate pentru administratori. http://codex.wordpress.org/Function_Reference/wp_new_user_notification

shanebp shanebp
19 dec. 2014 17:17:48

Mulțumesc shanebp - cred că sugestia ta este de fapt cea mai bună soluție pentru nevoile mele.

Pat Gilmour Pat Gilmour
20 dec. 2014 01:24:28

@PatGilmour Atunci te rog marchează-l ca soluție.

kaiser kaiser
17 mar. 2016 02:21:28

@PatGilmour Dacă răspunsul original este incorect, atunci probabil nu ar trebui marcat ca corect. Aș marca fie răspunsul lui sMyles ca corect, fie aș actualiza răspunsul lui shanebp cu soluția oferită în comentarii.

Simon East Simon East
12 ian. 2017 03:52:33
0

Iată soluția mea, utilizează filtrul update_option_*, cred că este abordarea corectă în acest caz. Adaugă acest cod într-un plugin sau în fișierul functions.php al temei tale, și apoi poți introduce în siguranță adrese de email separate prin virgulă în ecranul setări->general.

add_filter('pre_update_option_admin_email','sanitize_multiple_emails',10,2);

function sanitize_multiple_emails($value,$oldValue)
{
    //dacă ceva nu este în regulă, lasă WordPress să continue așa cum ar face-o în mod normal.
    if(!isset($_POST["admin_email"]))
        return $value;

    $result = "";
    $emails = explode(",",$_POST["admin_email"]);
    foreach($emails as $email)
    {
        $email = trim($email);
        $email = sanitize_email( $email );

        //din nou, ceva în neregulă? lasă WordPress să continue.
        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