自定义wordpress评论回复邮件通知功能并美化评论回复邮件

  • A+
所属分类:建博笔记

要自定义评论回复邮件通知功能首先需要开启这个功能,开启方法请参考文章:给wordpress添加评论回复邮件通知功能

自定义评论回复邮件通知功能根据用户角色的不同可以分为管理员、订阅者、投稿者、作者、编辑和访客。本文主要针对管理员和访客介绍自定义设置功能。

自定义wordpress评论回复邮件通知功能并美化评论回复邮件

第一种:所有回复都发送邮件通知

顾名思义,就是不管是管理员还是其他访客对某条评论做出回复时,这条评论的评论者都会收到邮件。

打开functions.php文件,在适当位置(最后一个?>)添加代码

  1. /* comment_mail_notify v1.0 by willin kan. (所有回复都发邮件) */
  2. function comment_mail_notify($comment_id) {
  3. $comment = get_comment($comment_id);
  4. $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  5. $spam_confirmed = $comment->comment_approved;
  6. if (($parent_id != '') && ($spam_confirmed != 'spam')) {
  7. $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); //e-mail 发出点, no-reply 可改为可用的 e-mail.
  8. $to = trim(get_comment($parent_id)->comment_author_email);
  9. $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
  10. $message = '
  11. <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;">
  12. <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
  13. <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
  14. . trim(get_comment($parent_id)->comment_content) . '</p>
  15. <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
  16. . trim($comment->comment_content) . '<br /></p>
  17. <p>您可以点击 查看回复完整内容</p>
  18. <p>欢迎再度光临 ' . get_option('blogname') . '</p>
  19. <p>(此邮件由系统自动发送,请勿回复.)</p>
  20. </div>';
  21. $from = "From: "" . get_option('blogname') . "" <$wp_email>";
  22. $headers = "$fromnContent-Type: text/html; charset=" . get_option('blog_charset') . "n";
  23. wp_mail( $to, $subject, $message, $headers );
  24. //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
  25. }
  26. }
  27. add_action('comment_post', 'comment_mail_notify');
  28. // -- END -

这种方式会带来一个风险,别人可以利用这个特点给每条评论做出回复,于是所有评论者都会收到邮件,而邮件中可能带有广告、软文、病毒等,同时还会大量增加网站的垃圾评论。

为了避免这个风险,建议在后台--设置--讨论--在评论显示之前勾选评论必须经人工批准选项。也可以采用接下来介绍的几种方式。

 

第二种:让访客自己选择是否发送邮件通知

通过在评论框区域添加一个有人回复时邮件通知我的选项,把是否发送邮件的主动权交给访客。

打开functions.php文件,在适当位置(最后一个?>)添加代码

  1. function comment_mail_notify($comment_id) {
  2. $admin_notify = '1'; // admin 要不要收回复通知 ( '1'=要 ; '0'=不要 )
  3. $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
  4. $comment = get_comment($comment_id);
  5. $comment_author_email = trim($comment->comment_author_email);
  6. $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  7. global $wpdb;
  8. if ($wpdb->query("Describe {$wpdb->comments} comment_mail_notify") == '')
  9. $wpdb->query("ALTER TABLE {$wpdb->comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;");
  10. if (($comment_author_email != $admin_email && isset($_POST['comment_mail_notify'])) || ($comment_author_email == $admin_email && $admin_notify == '1'))
  11. $wpdb->query("UPDATE {$wpdb->comments} SET comment_mail_notify='1' WHERE comment_ID='$comment_id'");
  12. $notify = $parent_id ? get_comment($parent_id)->comment_mail_notify : '0';
  13. $spam_confirmed = $comment->comment_approved;
  14. if ($parent_id != '' && $spam_confirmed != 'spam' && $notify == '1') {
  15. $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
  16. $to = trim(get_comment($parent_id)->comment_author_email);
  17. $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
  18. $message = '
  19. <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;">
  20. <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
  21. <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
  22. . trim(get_comment($parent_id)->comment_content) . '</p>
  23. <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
  24. . trim($comment->comment_content) . '<br /></p>
  25. <p>您可以点击查看回复的完整内容</p>
  26. <p>还要再度光临 ' . get_option('blogname') . '</p>
  27. <p>(此邮件由系统自动发送,请勿回复.)</p>
  28. </div>';
  29. $from = "From: "" . get_option('blogname') . "" <$wp_email>";
  30. $headers = "$fromnContent-Type: text/html; charset=" . get_option('blog_charset') . "n";
  31. wp_mail( $to, $subject, $message, $headers );
  32. //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
  33. }
  34. }
  35. add_action('comment_post', 'comment_mail_notify');
  36. /* 自动加勾选栏 */
  37. function add_checkbox() {
  38. 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>';
  39. }
  40. add_action('comment_form', 'add_checkbox');

这样一来,只有当评论者勾选此选项时,他才会收到来自管理员(或他人)的评论回复邮件。

 

第三种:管理员自行决定发送邮件通知

打开functions.php文件,在适当位置(最后一个?>)添加代码

  1. function comment_mail_notify($comment_id) {
  2. $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
  3. $comment = get_comment($comment_id);
  4. $comment_author_email = trim($comment->comment_author_email);
  5. $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  6. $to = $parent_id ? trim(get_comment($parent_id)->comment_author_email) : '';
  7. $spam_confirmed = $comment->comment_approved;
  8. if (($parent_id != '') && ($spam_confirmed != 'spam') && ($to != $admin_email) && ($comment_author_email == $admin_email)) {
  9. $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
  10. $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
  11. $message = '
  12. <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;">
  13. <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
  14. <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
  15. . trim(get_comment($parent_id)->comment_content) . '</p>
  16. <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
  17. . trim($comment->comment_content) . '<br /></p>
  18. <p>您可以点击 查看回复的完整内容</p>
  19. <p>还要再度光临 ' . get_option('blogname') . '</p>
  20. <p>(此邮件由系统自动发送,请勿回复.)</p>
  21. </div>';
  22. $from = "From: "" . get_option('blogname') . "" <$wp_email>";
  23. $headers = "$fromnContent-Type: text/html; charset=" . get_option('blog_charset') . "n";
  24. wp_mail( $to, $subject, $message, $headers );
  25. //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
  26. }
  27. }
  28. add_action('comment_post', 'comment_mail_notify');

其中,第8行的判断语句

  1. 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的回复才可发

这三个条件可以根据自己的需求组合。

 

评论回复邮件美化

至此,我们已经设置好了评论回复邮件通知功能,但是默认情况下,评论者收到的邮件是很丑的,毫无美感可言。为此,我觉得很有必要给它美化美化。

先看一下美化后的效果图(自适应),童鞋们也可以直接在文章下面评论留言,被回复的话就会收到邮件并查看样式了。

自定义wordpress评论回复邮件通知功能并美化评论回复邮件

美化后的评论回复邮件效果

相关代码如下:

  1. <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;">
  2. <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;">
  3. <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> 的留言回复通知!
  4. </span>
  5. </div>
  6. <div style="width: 90%;margin:0 auto">
  7. <p>' . trim(get_comment($parent_id)->comment_author) . ',您好!</p>
  8. <p>您曾在 ' . get_option("blogname") . ' 的文章:<span style="text-decoration-line: underline;">' . get_the_title($comment->comment_post_ID) . '</span> 上发表评论:
  9. <p style="background-color: #eee;border: 1px solid #bbb;padding: 10px 15px;">' . nl2br(get_comment($parent_id)->comment_content) . '
  10. </p>
  11. <p>' . trim($comment->comment_author) . ' 给您的回复如下:
  12. <p style="background-color: #eee;border: 1px solid #bbb;padding: 10px 15px;">' . nl2br($comment->comment_content) . '
  13. </p>
  14. <p>您可以点击 <a style="text-decoration: none;color: #00bbff;" href="' . htmlspecialchars(get_comment_link($parent_id)) . '">这里</a> 查看回复的完整內容!
  15. </p>
  16. <p>感谢您对 <a style="text-decoration: none;color: #00bbff;" href="' . get_option('home') . '">' . get_option('blogname') . '</a> 的关注,如有疑问请在博客留言,我会尽力解答!
  17. </p>
  18. </div>

将这部分代码替换到你在上面选择的三种方式里的<div>~~~</div>之间。注意,不要把<div>~~~</div>外边的''给替换掉。

小技巧

如果这个样式不符合你的审美,想要自定义的话,可以先在本地新建一个HTML文档,然后复制这份样式进去,再根据自己的需要修改,修改好以后再替换到服务器中对应的位置,并做最终的测试。

这样可以减少直接在网站里做测试带来的麻烦,不需要每次修改后都发表一个测试评论,然后还得去邮箱里查看邮件,反复如此了。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: