Как изменить получателя email-уведомлений о новых комментариях в WordPress?
Как изменить пользователя, который получает email-уведомления о новых комментариях и необходимости их модерации?
WordPress отправляет уведомления пользователю с ролью администратор. Мой клиент является редактором сайта. Я хочу, чтобы уведомления о комментариях приходили редактору, а не администратору.
Как это сделать?

Есть отличная статья, объясняющая как подключиться к 2 фильтрам для этого на https://web.archive.org/web/20200216075253/http://www.sourcexpress.com/customize-wordpress-comment-notification-emails/
Чтобы отправлять уведомления конкретному пользователю, а не администратору сайта, попробуйте этот код для пользователя с ID 123:
function se_comment_moderation_recipients( $emails, $comment_id ) {
$comment = get_comment( $comment_id );
$post = get_post( $comment->comment_post_ID );
$user = get_user_by( 'id', '123' );
// Возвращаем только email автора, если автор может редактировать записи
if ( user_can( $user->ID, 'edit_published_posts' ) && ! empty( $user->user_email ) ) {
$emails = array( $user->user_email );
}
return $emails;
}
add_filter( 'comment_moderation_recipients', 'se_comment_moderation_recipients', 11, 2 );
add_filter( 'comment_notification_recipients', 'se_comment_moderation_recipients', 11, 2 );

Я не знаю о существовании хука, который мог бы изменить только получателя уведомления о комментарии... Вероятно, вам потребуется переопределить какую-то основную функцию, но вот небольшой обходной путь, который вы можете использовать:
1. Отключите функцию отправки email в настройках комментариев WordPress (если только вы не хотите получать уведомления тоже)
2. Отправляйте уведомление вручную, используя хук действия comment_post
. Просто добавьте эту функцию в functions.php
add_filter( 'comment_post', 'comment_notification' );
function comment_notification( $comment_ID, $comment_approved ) {
// Отправляем email только если комментарий не одобрен
if( $comment_approved == 0 ) {
$subject = 'тема письма здесь';
$message = 'текст сообщения здесь';
wp_mail( 'email.редактора@здесь.com' , $subject, $message );
}
}
// Удалите условие if, если хотите получать email даже если комментарий не требует модерации
`comment_post` — это действие, срабатывающее сразу после добавления комментария в базу данных.

Существует фильтр для изменения текста письма о модерации комментариев:
function change_comment_email( $body, $comment_id ) {
$body = preg_replace( "/(A new )comment/s", "$1review", $body );
$body = preg_replace( "/(Currently \d+ )comment/s", "$1review", $body );
$body = preg_replace( "/Comment:/", "Review:", $body );
return $body;
}
add_filter( 'comment_moderation_text', 'change_comment_email', 20, 2 );
add_filter( 'comment_notification_text', 'change_comment_email', 20, 2 );

Если вы хотите отправить это письмо нескольким людям, используйте следующий код в файле functions.php:
function se_comment_moderation_recipients( $emails, $comment_id ) {
$comment = get_comment( $comment_id );
$post = get_post( $comment->comment_post_ID );
$emails = array();
// $users = array(набор ID пользователей, которым вы хотите отправить письма)
$users = array( 1, 16628, 15983 );
foreach($users as $uid){
$user = get_user_by( 'id', $uid );
// Возвращает email пользователей.
if ( !empty( $user->user_email ) ) {
$emails[] = $user->user_email;
}
}
$emails_list = array(implode(",",$emails));
return $emails_list;
}
add_filter( 'comment_moderation_recipients', 'se_comment_moderation_recipients', 11, 2 );
add_filter( 'comment_notification_recipients', 'se_comment_moderation_recipients', 11, 2 );

Альтернативный и более гибкий способ, чем взлом кода в других ответах:
Создайте отдельный email-адрес для администратора блога. Например, site@ваш-блог.tld, который будет отличаться от editor@ваш-блог.tld и technical@ваш-блог.tld.
Вариант A: Настройте пересылку писем с site@ и редактору, и техническому администратору. Создайте site@ как алиас. Это работает, если редактор не против получать копии всех автоматических писем с сайта. Он может просто фильтровать нерелевантные письма или изучать, что происходит на сайте. Хороший вариант для небольших клиентов.
Вариант B: Настройте фильтр для site@, чтобы автоматически пересылать уведомления о комментариях редактору, а все остальные письма - техническому администратору. Технический администратор может настроить фильтр для архивации/удаления всех уведомлений о комментариях, чтобы они не появлялись во входящих. Первоначальную пересылку на editor@ можно реализовать на почтовом сервере с помощью инструментов вроде procmail. Альтернативно, можно сделать это в почтовом клиенте, если он работает 24/7, или даже использовать Hotmail, Gmail и т.д., вручную настроив фильтр.
