
Последнее обновление - 11 февраля 2025 в 00:49
Из этой заметки вы узнаете, как можно сообщить комментатору об ответе на его комментарий на сайте, работающем на CMS WordPress, без использования плагина. Уведомление комментатора об ответе на сайте является важной функцией, которая может улучшить взаимодействие между посетителями и администраторами сайта. Если вы используете CMS WordPress, то есть несколько способов реализации данной функции без использования плагина.
Код 1 — использование встроенных функций WordPress. Для этого необходимо открыть файл functions.php вашей рабочей темы и добавить следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function comment_reply_notification($comment_id, $reply_id){ $comment = get_comment($comment_id); $author_email = $comment->comment_author_email; $reply = get_comment($reply_id); $author = get_userdata($reply->user_id); $message = 'Здравствуйте, '.$comment->comment_author.'!'. "\r\n\r\n"; $message .= 'На сайте '.get_option('blogname').' появился ответ на ваш комментарий:'. "\r\n\r\n"; $message .= 'Ответ от '.$author->display_name.':'. "\r\n\r\n"; $message .= $reply->comment_content. "\r\n\r\n"; $message .= 'Ссылка на комментарий: '.get_comment_link($comment_id). "\r\n\r\n"; wp_mail($author_email, 'Ответ на комментарий', $message); } add_action('wp_insert_comment','comment_reply_notification',10,2); |
Этот код добавляет действие, которое будет выполнено при добавлении нового комментария. Функция comment_reply_notification получает ID комментария и ID ответа на комментарий, затем формирует текст уведомления и отправляет его на e-mail автора комментария.
Код 2 — использование хука comment_post. Для этого необходимо открыть файл functions.php вашей темы и добавить следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function comment_post_notification($comment_id){ $comment = get_comment($comment_id); $parent_id = $comment->comment_parent; if($parent_id != 0){ $parent_comment = get_comment($parent_id); $author_email = $parent_comment->comment_author_email; $author = get_userdata($comment->user_id); $message = 'Здравствуйте, '.$parent_comment->comment_author.'!'. "\r\n\r\n"; $message .= 'На сайте '.get_option('blogname').' появился ответ на ваш комментарий:'. "\r\n\r\n"; $message .= 'Ответ от '.$author->display_name.':'. "\r\n\r\n"; $message .= $comment->comment_content. "\r\n\r\n"; $message .= 'Ссылка на комментарий: '.get_comment_link($parent_id). "\r\n\r\n"; wp_mail($author_email, 'Ответ на комментарий', $message); } } add_action('comment_post','comment_post_notification',10,1); |
Этот код добавляет действие, которое будет выполнено при добавлении нового комментария. Функция comment_post_notification получает ID комментария, затем проверяет, является ли комментарий ответом на другой комментарий. Если да, то формирует текст уведомления и отправляет его на e-mail автора комментария.
Оба кода позволяют уведомлять комментаторов об ответах на сайте без использования плагина. Выбор способа зависит от ваших потребностей и удобства использования.
Раньше я пользовался для этой цели плагинами. Но со временем, они переставали обновляться, видимо разработчики теряли к ним интерес и прекращали поддержку. Теперь это можно легко реализовать при помощи небольшой корректировки файла functions.php.
К большому сожалению, отправка писем через встроенную в WordPress функцию wp_mail, даже при использовании вышеуказанных кодов, происходит не всегда корректно, через раз. Более надёжным способом будет использование корректировки файла функций в связке с плагином WP Mail SMTP.
Необходимо установить и настроить плагин WP Mail SMTP, который имеется в официальном репозитории WordPress. Настроить его несложно, всё интуитивно понятно. Кроме того, в нём имеется мастер настройки. С помощью этого плагина отправка писем происходит в обход дефолтной wp_mail.
Далее, в файл functions.php добавляем следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// Функция для отправки уведомлений об ответах на комментарии с использованием SMTP add_action('comment_post', 'send_comment_reply_notification', 10, 2); function send_comment_reply_notification($comment_ID, $comment_approved) { if (1 !== $comment_approved) { return; // Комментарий не одобрен, уведомление не отправляется } $comment = get_comment($comment_ID); $parent_comment = get_comment($comment->comment_parent); if ($parent_comment) { $to = sanitize_email($parent_comment->comment_author_email); if (!is_email($to)) { return; // Неверный email } $subject = 'Ответ на ваш комментарий'; $message = sprintf( "Здравствуйте, %s!\n\nНа ваш комментарий был дан ответ:\n\n%s\n\nПосмотреть комментарии можно по следующей ссылке:\n%s", $parent_comment->comment_author, $comment->comment_content, get_permalink($comment->comment_post_ID) ); // Используем wp_mail для отправки письма if (wp_mail($to, $subject, $message)) { error_log("Уведомление успешно отправлено пользователю: " . $to); // Логируем успешную отправку } else { error_log("Ошибка при отправке уведомления для пользователя: " . $to); // Логируем ошибку } } } |
Если материал оказался полезен и помог решить проблему, можете поддержать автора, направив камеру смартфона на QR-код.
Всем WEB!
Нормальное решение, у меня сработало на сайте. Оба варианта рабочие, воспользовался вторым способом.
Отлично, рад, что материал оказался полезен!
Что-то у меня перестал работать второй способ. Попробую первый.
попробуем исправить.
Почему-то перестали приходить любые уведомления с сайта. Даже письма о том, что поступил комментарий к посту.
Возможно, надо проверять настройки сервера.
А у вас на этом сайте какой способ сейчас используется?
На этом сайте использую немного другой код в связке с плагином WP Mail SMTP, чтобы улучшить доставляемость писем. Без него у меня wp_mail не всегда корректно срабатывала.
Благодарю вас за наводку на интересный плагин. А можете поделиться немного другим кодом? Готов заплатить за надёжное решение в разумном размере.
Сейчас попробую дополнить этот пост. Если код будет полезен, и у Вас всё получится, буду благодарен за поддержку на Ваше усмотрение!
Готово, попробуйте это решение.