Enviar correos de administrador a múltiples direcciones de email
¿Existe algún hook que me permita enviar emails a múltiples direcciones para las notificaciones administrativas predeterminadas?
Esperaba poder construir un array:
$adminEmails = array('me1@example.com', 'me2@example.com');
Y que todos los correos de administrador (como notificaciones de nuevos usuarios) se enviaran a $adminEmails
¿Es posible?

Esto se puede hacer filtrando la función wp_mail
, verificando si to
está configurado con el correo del administrador, y si es así, agregar direcciones de correo adicionales, y devolver los argumentos a wp_mail
add_filter( 'wp_mail', 'my_custom_to_admin_emails' );
/**
* Filtrar la función WP_Mail para agregar múltiples correos de administrador
*
*
*
* @param array $args Un array compacto de argumentos de wp_mail(), incluyendo los valores "to" (para),
* subject (asunto), message (mensaje), headers (cabeceras) y attachments (adjuntos).
*
* @return array
*/
function my_custom_to_admin_emails( $args ) {
// Si 'to' no está establecido (quién sabe por qué no lo estaría) devolver los argumentos
if( ! isset($args['to']) || empty($args['to']) ) return $args;
// Si TO es un array de correos, probablemente no sea un correo de administrador
if( is_array( $args['to'] ) ) return $args;
$admin_email = get_option( 'admin_email' );
// Verificar si el correo del admin está en la cadena, ya que TO podría estar formateado como 'Administrador <admin@dominio.com>',
// y si verificamos específicamente si es solo el correo, podríamos perder algunos correos de admin.
if( strpos( $args['to'], $admin_email ) !== FALSE ){
// Establecer la clave TO del array igual al correo del admin existente, más cualquier correo adicional
//
// Todas las direcciones de correo proporcionadas a wp_mail() como parámetro $to deben cumplir con RFC 2822. Algunos ejemplos válidos:
// usuario@ejemplo.com
// Usuario <usuario@ejemplo.com>
$args['to'] = array( $args['to'], 'otro@dominio.com', 'Admin4 <admin4@dominio.com>' );
}
return $args;
}
Devolvemos TO como un array, ya que wp_mail
manejará el array y lo explotará según sea necesario para enviar el correo

Algo de lo que hay que tener cuidado: si solicitas un restablecimiento de contraseña y tu correo electrónico es el mismo que la opción admin_email
, esos otros correos también recibirán ese mensaje... tenlo en cuenta, solo verifica el campo PARA cuando se envían los correos, no verifica si se supone que es un correo de administrador (ya que ni siquiera sé cómo hacer eso ahora mismo)

Gracias @shanebp - pero no funciona. Simplemente los fusiona en una sola cadena en las opciones, así que intenta enviar a: me1@example.comme2@example.com

Eso es una lástima... Entonces, para solo correos de administrador sobre nuevos usuarios, la función es conectable. Así que podrías crear una versión que envíe a múltiples correos electrónicos predefinidos para los administradores. http://codex.wordpress.org/Function_Reference/wp_new_user_notification

Gracias shanebp - creo que lo que sugieres es realmente la mejor solución para mis necesidades.

Aquí está mi solución, utiliza el filtro update_option_*, creo que es la forma correcta de abordarlo aquí. Agrega esto a un plugin o al archivo functions.php de tu tema, y luego podrás ingresar de manera segura correos electrónicos de administrador separados por comas en la pantalla de configuración->general.
add_filter('pre_update_option_admin_email','sanitize_multiple_emails',10,2);
function sanitize_multiple_emails($value,$oldValue)
{
// Si algo parece sospechoso, deja que WordPress continúe como lo haría 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 );
// De nuevo, ¿algo está mal? Permite que WordPress lo maneje.
if(!is_email($email))
return $value;
$result .= $email.",";
}
if(strlen($result == ""))
return $value;
$result = substr($result,0,-1);
return $result;
}
