Работа с отзывами в WordPress — важный аспект для многих сайтов, особенно если это магазины, сервисы или блоги с обратной связью. В этой статье разберём, как организовать автоматическую отправку уведомлений с новыми отзывами на email, чтобы не пропустить важную информацию и оперативно реагировать на комментарии пользователей.
Почему важна автоматическая отправка отзывов на email в WordPress
Стандартно WordPress уведомляет администратора о новых комментариях, но не всегда это работает корректно или удобно. Например, если отзывы — это кастомный тип комментариев или используются сторонние плагины для отзывов, стандартные уведомления могут не срабатывать.
Настроив собственный механизм отправки писем, вы получаете полный контроль над форматом уведомлений, списком получателей и условиями отправки. Это помогает быстрее реагировать на отзывы, улучшать качество обратной связи и повышать лояльность пользователей.
В следующем разделе рассмотрим, как реализовать такой механизм с помощью стандартных хуков WordPress и собственного кода.
Использование хука comment_post для отправки уведомлений о новых отзывах
Хук comment_post вызывается при добавлении нового комментария или отзыва. Его удобно использовать, чтобы запускать отправку email с нужной информацией.
Пример функции, которая отправляет письмо при появлении нового отзыва:
function wpcodex_send_review_notification($comment_ID, $comment_approved) {
if(1 !== $comment_approved) {
return; // Отзыв не одобрен, не отправляем
}
$comment = get_comment($comment_ID);
if('review' !== get_comment_type($comment_ID)) {
return; // Если тип комментария не "review", игнорируем
}
$post = get_post($comment->comment_post_ID);
$to = get_option('admin_email');
$subject = 'Новый отзыв на сайте ' . get_bloginfo('name');
$message = "Появился новый отзыв к записи '{$post->post_title}':\n\n";
$message .= "Автор: {$comment->comment_author}\n";
$message .= "Email: {$comment->comment_author_email}\n";
$message .= "Отзыв:\n{$comment->comment_content}\n\n";
$message .= 'Ссылка для просмотра: ' . get_comment_link($comment_ID);
wp_mail($to, $subject, $message);
}
add_action('comment_post', 'wpcodex_send_review_notification', 10, 2);В этом коде:
- Проверяем, одобрен ли отзыв.
- Проверяем, что тип комментария — именно
review(если у вас кастомный тип отзывов; если обычные комментарии, уберите эту проверку). - Формируем письмо с данными отзыва и ссылкой на него.
- Отправляем письмо на email администратора.
Если у вас нет кастомного типа комментариев для отзывов, а используются обычные комментарии, то проверку типа можно убрать или заменить на проверку категории поста.
Как добавить поддержку HTML-писем и кастомизировать уведомления
По умолчанию функция wp_mail отправляет простые текстовые письма. Чтобы сделать уведомления более информативными и красивыми, можно использовать HTML-формат.
Добавим заголовки для HTML и изменим тело письма:
function wpcodex_send_review_notification_html($comment_ID, $comment_approved) {
if(1 !== $comment_approved) {
return;
}
$comment = get_comment($comment_ID);
$to = get_option('admin_email');
$subject = 'Новый отзыв на сайте ' . get_bloginfo('name');
$headers = array('Content-Type: text/html; charset=UTF-8');
$message = '<h2>Новый отзыв к записи "' . get_the_title($comment->comment_post_ID) . '"</h2>';
$message .= '<p><strong>Автор:</strong> ' . esc_html($comment->comment_author) . '</p>';
$message .= '<p><strong>Email:</strong> ' . esc_html($comment->comment_author_email) . '</p>';
$message .= '<p><strong>Отзыв:</strong><br>' . nl2br(esc_html($comment->comment_content)) . '</p>';
$message .= '<p><a href="' . esc_url(get_comment_link($comment_ID)) . '">Перейти к отзыву</a></p>';
wp_mail($to, $subject, $message, $headers);
}
remove_action('comment_post', 'wpcodex_send_review_notification', 10);
add_action('comment_post', 'wpcodex_send_review_notification_html', 10, 2);Теперь уведомления будут красивее и удобнее для чтения. Можно добавить CSS стили, если это необходимо, или подключать готовые шаблоны писем.
Использование плагинов для расширения функционала отзывов и уведомлений
Если вы хотите более гибко работать с отзывами, можно использовать плагины, которые расширяют стандартные возможности WordPress:
- WP Remark — мощный инструмент для управления отзывами и комментариями, включая отправку уведомлений и модерацию. Подробнее на wpshop.ru.
- Expert Review — плагин для создания отзывов с оценками, который поддерживает уведомления и интеграцию с почтой.
- Плагин Notifications — универсальный инструмент для настройки любых уведомлений по email, в том числе и по новым комментариям и отзывам.
Использование подобных плагинов позволяет избежать написания кода и быстро настроить необходимые функции.
Как сделать массовую отправку уведомлений по определённому расписанию
Иногда полезно не отправлять письмо при каждом новом отзыве, а собирать их и отправлять сводкой, например, раз в день или раз в неделю. Для этого можно использовать WP-Cron.
Пример создания ежедневного задания для отправки накопленных отзывов:
function wpcodex_schedule_review_summary() {
if (!wp_next_scheduled('wpcodex_daily_review_summary_event')) {
wp_schedule_event(time(), 'daily', 'wpcodex_daily_review_summary_event');
}
}
add_action('wp', 'wpcodex_schedule_review_summary');
function wpcodex_send_review_summary() {
$args = array(
'status' => 'approve',
'type' => 'review',
'date_query' => array(
'after' => '1 day ago'
)
);
$comments = get_comments($args);
if(empty($comments)) {
return; // Нет новых отзывов
}
$message = '<h2>Сводка новых отзывов за сутки</h2><ul>';
foreach($comments as $comment) {
$message .= '<li><strong>' . esc_html($comment->comment_author) . '</strong>: ' . esc_html(wp_trim_words($comment->comment_content, 15)) . ' <a href="' . esc_url(get_comment_link($comment->comment_ID)) . '">Подробнее</a></li>';
}
$message .= '</ul>';
$to = get_option('admin_email');
$subject = 'Сводка новых отзывов за сутки на ' . get_bloginfo('name');
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail($to, $subject, $message, $headers);
}
add_action('wpcodex_daily_review_summary_event', 'wpcodex_send_review_summary');Этот код создаёт ежедневное событие, которое собирает все отзывы за последние 24 часа и отправляет их одним письмом.
Советы по отладке и безопасности отправки email в WordPress
При реализации отправки уведомлений важно:
- Проверять корректность email-адресов и использовать функцию
sanitize_email()перед отправкой. - Использовать функции экранирования, такие как
esc_html()иesc_url(), чтобы избежать XSS-уязвимостей. - Проверять, не попадает ли письмо в спам. Для этого можно настроить SMTP-сервер с помощью плагинов, например WP Mail SMTP.
- Логировать ошибки отправки, чтобы быстро выявлять возможные проблемы.
Эти простые рекомендации помогут сделать работу с уведомлениями стабильной и безопасной.