[mark_a]要自定义评论回复邮件通知功能首先需要开启这个功能,开启方法请参考文章《给wordpress添加评论回复邮件通知功能》。[/mark_a]
第一种:所有回复都发送邮件通知
顾名思义,就是不管是管理员还是其他访客对某条评论做出回复时,这条评论的评论者都会收到邮件。
打开【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 -
这种方式会带来一个风险,别人可以利用这个特点给每条评论做出回复,于是所有评论者都会收到邮件,而邮件中可能带有广告、软文、病毒等,同时还会大量增加网站的垃圾评论。
为了避免这个风险,建议勾选【后台--设置--讨论--在评论显示之前--评论必须经人工批准】选项。也可以采用接下来介绍的几种方式。
第二种:让访客自己选择是否发送邮件通知
[mark_c]通过在评论框区域添加一个【有人回复时邮件通知我】的选项,把是否发送邮件的主动权交给访客。[/mark_c]
打开【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>~~~</div>
外边的''
给替换掉。
继续阅读
如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
2019年8月9日 19:21 1F
评论邮件美化样式效果测试
2019年8月9日 19:22 1B
@明天会更好 邮件样式效果回复
2019年8月9日 19:24 1B
@明天会更好 另一种评论样式效果测试