Отправка административных email-уведомлений на несколько адресов
Есть ли хук, который позволит отправлять административные email-уведомления по умолчанию на несколько email-адресов?
Я хотел бы создать массив:
$adminEmails = array('me1@example.com', 'me2@example.com');
И чтобы все административные письма (например, уведомления о новых пользователях) отправлялись на адреса из $adminEmails
Возможно ли это?

Это можно сделать, отфильтровав функцию wp_mail
, проверив, установлен ли параметр to
на email администратора, и если да, добавить дополнительные email-адреса, а затем вернуть аргументы обратно в wp_mail
add_filter( 'wp_mail', 'my_custom_to_admin_emails' );
/**
* Фильтр функции WP_Mail для добавления нескольких email-адресов администратора
*
*
*
* @param array $args Компактный массив аргументов wp_mail(), включая значения "to" email,
* subject, message, headers и attachments.
*
* @return array
*/
function my_custom_to_admin_emails( $args ) {
// Если параметр to не установлен (непонятно, почему так может быть), возвращаем аргументы
if( ! isset($args['to']) || empty($args['to']) ) return $args;
// Если TO является массивом email-адресов, значит, это, вероятно, не email администратора
if( is_array( $args['to'] ) ) return $args;
$admin_email = get_option( 'admin_email' );
// Проверяем, найден ли email администратора в строке, так как TO может быть форматирован как 'Администратор <admin@domain.com>',
// и если мы просто проверим, совпадает ли он с email, то можем пропустить некоторые email администратора.
if( strpos( $args['to'], $admin_email ) !== FALSE ){
// Устанавливаем параметр TO как массив, включая существующий email администратора и любые дополнительные email-адреса
//
// Все email-адреса, передаваемые в wp_mail() как параметр $to, должны соответствовать RFC 2822. Некоторые допустимые примеры:
// user@example.com
// Пользователь <user@example.com>
$args['to'] = array( $args['to'], 'another@domain.com', 'Админ4 <admin4@domain.com>' );
}
return $args;
}
Мы возвращаем TO в виде массива, так как wp_mail
обработает массив и при необходимости разобьёт его для отправки письма

Одна вещь, на которую стоит обратить внимание: если вы запрашиваете сброс пароля, и ваш email совпадает с опцией admin_email
, то другие письма также будут приходить на этот адрес... просто имейте это в виду, система проверяет только поле TO при отправке писем, но не проверяет, должно ли это быть письмо для администратора (так как я пока не знаю, как это правильно реализовать)

Спасибо @shanebp - но это не работает. Опция просто объединяет их в одну строку, поэтому отправка идет на: me1@example.comme2@example.com

Жаль... Что касается уведомлений администратора о новых пользователях, эта функция заменяемая. Вы можете создать версию, которая отправляет письма на несколько жестко заданных email адресов. http://codex.wordpress.org/Function_Reference/wp_new_user_notification

Спасибо shanebp - думаю, ваше предложение действительно лучшее решение для моей задачи.

Вот моё решение, которое использует фильтр update_option_*. Я считаю, что это правильный подход в данном случае. Добавьте этот код в плагин или файл functions.php вашей темы, затем вы сможете безопасно указывать несколько адресов электронной почты администратора через запятую в настройках (Настройки → Общие).
add_filter('pre_update_option_admin_email','sanitize_multiple_emails',10,2);
function sanitize_multiple_emails($value,$oldValue)
{
// Если что-то подозрительное, доверяем WordPress продолжить как обычно
if(!isset($_POST["admin_email"]))
return $value;
$result = "";
$emails = explode(",",$_POST["admin_email"]);
foreach($emails as $email)
{
$email = trim($email);
$email = sanitize_email( $email );
// Опять же, если что-то не так - позволим WordPress обработать как обычно
if(!is_email($email))
return $value;
$result .= $email.",";
}
if(strlen($result == ""))
return $value;
$result = substr($result,0,-1);
return $result;
}
