Trimite email-uri de administrare către mai multe adrese de email
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?

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

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)

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

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

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

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;
}
