- A+
要自定义评论回复邮件通知功能首先需要开启这个功能,开启方法请参考文章:给wordpress添加评论回复邮件通知功能
自定义评论回复邮件通知功能根据用户角色的不同可以分为管理员、订阅者、投稿者、作者、编辑和访客。本文主要针对管理员和访客介绍自定义设置功能。

第一种:所有回复都发送邮件通知
顾名思义,就是不管是管理员还是其他访客对某条评论做出回复时,这条评论的评论者都会收到邮件。
打开functions.php
文件,在适当位置(最后一个?>
前)添加代码
- /* comment_mail_notify v1.0 by willin kan. (所有回复都发邮件) */
- function comment_mail_notify($comment_id) {
- $comment = get_comment($comment_id);
- $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
- $spam_confirmed = $comment->comment_approved;
- if (($parent_id != '') && ($spam_confirmed != 'spam')) {
- $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); //e-mail 发出点, no-reply 可改为可用的 e-mail.
- $to = trim(get_comment($parent_id)->comment_author_email);
- $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
- $message = '
- <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
- <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
- <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
- . trim(get_comment($parent_id)->comment_content) . '</p>
- <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
- . trim($comment->comment_content) . '<br /></p>
- <p>您可以点击 查看回复完整内容</p>
- <p>欢迎再度光临 ' . get_option('blogname') . '</p>
- <p>(此邮件由系统自动发送,请勿回复.)</p>
- </div>';
- $from = "From: "" . get_option('blogname') . "" <$wp_email>";
- $headers = "$fromnContent-Type: text/html; charset=" . get_option('blog_charset') . "n";
- wp_mail( $to, $subject, $message, $headers );
- //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
- }
- }
- add_action('comment_post', 'comment_mail_notify');
- // -- END -
这种方式会带来一个风险,别人可以利用这个特点给每条评论做出回复,于是所有评论者都会收到邮件,而邮件中可能带有广告、软文、病毒等,同时还会大量增加网站的垃圾评论。
为了避免这个风险,建议在后台
--设置
--讨论
--在评论显示之前
中勾选评论必须经人工批准
选项。也可以采用接下来介绍的几种方式。
第二种:让访客自己选择是否发送邮件通知
通过在评论框区域添加一个有人回复时邮件通知我
的选项,把是否发送邮件的主动权交给访客。
打开functions.php
文件,在适当位置(最后一个?>
前)添加代码
- function comment_mail_notify($comment_id) {
- $admin_notify = '1'; // admin 要不要收回复通知 ( '1'=要 ; '0'=不要 )
- $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
- $comment = get_comment($comment_id);
- $comment_author_email = trim($comment->comment_author_email);
- $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
- global $wpdb;
- if ($wpdb->query("Describe {$wpdb->comments} comment_mail_notify") == '')
- $wpdb->query("ALTER TABLE {$wpdb->comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;");
- if (($comment_author_email != $admin_email && isset($_POST['comment_mail_notify'])) || ($comment_author_email == $admin_email && $admin_notify == '1'))
- $wpdb->query("UPDATE {$wpdb->comments} SET comment_mail_notify='1' WHERE comment_ID='$comment_id'");
- $notify = $parent_id ? get_comment($parent_id)->comment_mail_notify : '0';
- $spam_confirmed = $comment->comment_approved;
- if ($parent_id != '' && $spam_confirmed != 'spam' && $notify == '1') {
- $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
- $to = trim(get_comment($parent_id)->comment_author_email);
- $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
- $message = '
- <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
- <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
- <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
- . trim(get_comment($parent_id)->comment_content) . '</p>
- <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
- . trim($comment->comment_content) . '<br /></p>
- <p>您可以点击查看回复的完整内容</p>
- <p>还要再度光临 ' . get_option('blogname') . '</p>
- <p>(此邮件由系统自动发送,请勿回复.)</p>
- </div>';
- $from = "From: "" . get_option('blogname') . "" <$wp_email>";
- $headers = "$fromnContent-Type: text/html; charset=" . get_option('blog_charset') . "n";
- wp_mail( $to, $subject, $message, $headers );
- //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
- }
- }
- add_action('comment_post', 'comment_mail_notify');
- /* 自动加勾选栏 */
- function add_checkbox() {
- echo '<input type="checkbox" name="comment_mail_notify" id="comment_mail_notify" value="comment_mail_notify" checked="checked" style="margin-left:20px;" /><label for="comment_mail_notify">有人回复时邮件通知我</label>';
- }
- add_action('comment_form', 'add_checkbox');
这样一来,只有当评论者勾选此选项时,他才会收到来自管理员(或他人)的评论回复邮件。
第三种:管理员自行决定发送邮件通知
打开functions.php
文件,在适当位置(最后一个?>
前)添加代码
- function comment_mail_notify($comment_id) {
- $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
- $comment = get_comment($comment_id);
- $comment_author_email = trim($comment->comment_author_email);
- $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
- $to = $parent_id ? trim(get_comment($parent_id)->comment_author_email) : '';
- $spam_confirmed = $comment->comment_approved;
- if (($parent_id != '') && ($spam_confirmed != 'spam') && ($to != $admin_email) && ($comment_author_email == $admin_email)) {
- $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
- $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
- $message = '
- <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
- <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
- <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
- . trim(get_comment($parent_id)->comment_content) . '</p>
- <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
- . trim($comment->comment_content) . '<br /></p>
- <p>您可以点击 查看回复的完整内容</p>
- <p>还要再度光临 ' . get_option('blogname') . '</p>
- <p>(此邮件由系统自动发送,请勿回复.)</p>
- </div>';
- $from = "From: "" . get_option('blogname') . "" <$wp_email>";
- $headers = "$fromnContent-Type: text/html; charset=" . get_option('blog_charset') . "n";
- wp_mail( $to, $subject, $message, $headers );
- //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
- }
- }
- add_action('comment_post', 'comment_mail_notify');
其中,第8行的判断语句
- if (($parent_id != '') && ($spam_confirmed != 'spam') && ($to != $admin_email) && ($comment_author_email == $admin_email)) {
是决定发出邮件的必要条件,具体如下:
($parent_id != '') && ($spam_confirmed != 'spam')
:回复的,并且不是spam时才可发,必需($to != $admin_email)
:不发给admin($comment_author_email == $admin_email)
:只有admin的回复才可发
这三个条件可以根据自己的需求组合。
评论回复邮件美化
至此,我们已经设置好了评论回复邮件通知功能,但是默认情况下,评论者收到的邮件是很丑的,毫无美感可言。为此,我觉得很有必要给它美化美化。
先看一下美化后的效果图(自适应),童鞋们也可以直接在文章下面评论留言,被回复的话就会收到邮件并查看样式了。
相关代码如下:
- <div style="background-color: #fff;border: 1px solid #02BDFB;color: #000;-moz-border-radius: 6px;-webkit-border-radius: 6px;-khtml-border-radius: 6px;border-radius: 6px;font-size: 14px;margin: 0 auto;font-family: Microsoft YaHei, arial, sans-serif;">
- <div style="background: #02BDFB;height: 60px;color: #fff;-moz-border-radius: 3px 3px 0 0;-webkit-border-radius: 3px 3px 0 0;-khtml-border-radius: 3px 3px 0 0;border-radius: 3px 3px 0 0;">
- <span style="height: 60px;line-height: 60px;margin-left: 30px;font-size: 18px;font-weight: bold;">这是一份来自 <a style="text-decoration: none;color: #000;" href="' . get_option('home') . '">' . get_option('blogname') . '</a> 的留言回复通知!
- </span>
- </div>
- <div style="width: 90%;margin:0 auto">
- <p>' . trim(get_comment($parent_id)->comment_author) . ',您好!</p>
- <p>您曾在 ' . get_option("blogname") . ' 的文章:<span style="text-decoration-line: underline;">' . get_the_title($comment->comment_post_ID) . '</span> 上发表评论:
- <p style="background-color: #eee;border: 1px solid #bbb;padding: 10px 15px;">' . nl2br(get_comment($parent_id)->comment_content) . '
- </p>
- <p>' . trim($comment->comment_author) . ' 给您的回复如下:
- <p style="background-color: #eee;border: 1px solid #bbb;padding: 10px 15px;">' . nl2br($comment->comment_content) . '
- </p>
- <p>您可以点击 <a style="text-decoration: none;color: #00bbff;" href="' . htmlspecialchars(get_comment_link($parent_id)) . '">这里</a> 查看回复的完整內容!
- </p>
- <p>感谢您对 <a style="text-decoration: none;color: #00bbff;" href="' . get_option('home') . '">' . get_option('blogname') . '</a> 的关注,如有疑问请在博客留言,我会尽力解答!
- </p>
- </div>
将这部分代码替换到你在上面选择的三种方式里的<div>~~~</div>
之间。注意,不要把<div>~~~</div>
外边的''
给替换掉。
感谢您的赞助!
支付宝赞助
微信赞助
扫一扫添加好友