Как изменить получателя email-уведомлений о новых комментариях в WordPress?

3 мая 2016 г., 03:44:51
Просмотры: 17.6K
Голосов: 8

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

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

Как это сделать?

1
Комментарии

Помог ли вам какой-либо из ответов? Если да, пожалуйста, рассмотрите возможность принять один из них.

Andy Macaulay-Brook Andy Macaulay-Brook
20 сент. 2016 г. 15:42:59
Все ответы на вопрос 5
0
11

Есть отличная статья, объясняющая как подключиться к 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 );
19 мая 2016 г. 16:57:08
1

Я не знаю о существовании хука, который мог бы изменить только получателя уведомления о комментарии... Вероятно, вам потребуется переопределить какую-то основную функцию, но вот небольшой обходной путь, который вы можете использовать:

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` — это действие, срабатывающее сразу после добавления комментария в базу данных.
3 мая 2016 г. 06:10:37
Комментарии

Никогда не изменяйте основные файлы. Ваши изменения будут перезаписаны при следующем обновлении WordPress. Для внесения изменений используйте фильтры.

Rick Hellewell Rick Hellewell
8 окт. 2021 г. 06:43:04
1
-1

Существует фильтр для изменения текста письма о модерации комментариев:

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 );
12 апр. 2018 г. 23:47:21
Комментарии

Это был не вопрос.

wickywills wickywills
11 июл. 2022 г. 10:14:04
0
-1

Если вы хотите отправить это письмо нескольким людям, используйте следующий код в файле 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 );

28 авг. 2020 г. 15:19:09
1
-2

Альтернативный и более гибкий способ, чем взлом кода в других ответах:

Создайте отдельный email-адрес для администратора блога. Например, site@ваш-блог.tld, который будет отличаться от editor@ваш-блог.tld и technical@ваш-блог.tld.

Вариант A: Настройте пересылку писем с site@ и редактору, и техническому администратору. Создайте site@ как алиас. Это работает, если редактор не против получать копии всех автоматических писем с сайта. Он может просто фильтровать нерелевантные письма или изучать, что происходит на сайте. Хороший вариант для небольших клиентов.

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

3 мая 2018 г. 09:00:26
Комментарии

Как же приятно получить минус на ответе двухлетней давности без комментария. Спасибо Peter Mortensen за правку

paulzag paulzag
29 окт. 2020 г. 05:10:48