魔扣论坛

魔扣源码论坛业务
查看: 958|回复: 5

[经验交流] 如何实现wordpress评论回复邮件通知

[复制链接]
  • TA的每日心情
    慵懒
    4 小时前
  • 签到天数: 2957 天

    [LV.Master]开坛老将

    7万

    主题

    227

    回帖

    27万

    积分

    管理员

    Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

    魔扣币
    745759
    贡献
    157915
    威望
    32799

    最佳新人活跃会员热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2015-12-14 16:38:47 | 显示全部楼层 |阅读模式
    魔扣币兑换比例:【 50以下 : ¥1 = 10 魔扣币 】丨【 50 - 100 :¥1 = 20 魔扣币】丨【 100以上:¥1 = 30 魔扣币 】

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    也许大家会问WordPress评论回复邮件通知有什么作用?Hicoogle觉得,对于博客最大好处就是可以增加博客的 粘性,想像一下,当访客有一天打开他的邮件,发现有一封来自你博客上评论回复的邮件通知,访客也许会再次去看看他曾经留言评论过的博客,这就无疑在一定程 度上会增加你博客的回头率。而对于访客的好处就是,如果你是去博客咨询点相关问题,但是过后你可能忘记这回事,就是博主在博客中解答了你相关的问题,你也 不知道结果,这时候有邮件回复通知就不会让你错过了。所以在一定程度上,WordPress评论回复邮件通知这个功能还是挺有用的。也许上面的废话太多了,说重点吧!

    WordPress评论回复邮件通知出于对访客有好度的考虑可以分三种形式:
    一、有勾选栏, 由访客决定是否要回应邮件通知(友好度比较好)
    二、无勾选栏, 由管理者决定在什麽条件下发邮件(这个中等吧)
    三、所有回覆都发邮件(这个就比较邪恶了,太强制性了吧?)

    必须注意的是:需要使用WordPress评论回复邮件通知功能,那么你的服务器一定要有 mail() 功能. 测试方式: 在登入页故意按下 ‘忘记密码’, 收到邮件就有 mail() 功能; 没收到邮件的可以下课了.

    一、有勾选栏, 由访客决定是否要对评论回复邮件通知:(推荐这种方式)
    (会在模板自动加勾选栏, 如果不想自动加, 可把後面一小段删除.)

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

    37. /* 自动加勾选栏 */
    38. function add_checkbox() {
    39. 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>';
    40. }
    41. add_action('comment_form', 'add_checkbox');

    42. // -- END ----------------------------------------
    复制代码

    二、无勾选栏, 由管理者决定在什麽条件下发邮件:

    1. /* comment_mail_notify v1.0 by willin kan. (无勾选栏) */
    2. function comment_mail_notify($comment_id) {
    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. $to = $parent_id ? trim(get_comment($parent_id)->comment_author_email) : '';
    8. $spam_confirmed = $comment->comment_approved;
    9. if (($parent_id != '') && ($spam_confirmed != 'spam') && ($to != $admin_email) && ($comment_author_email == $admin_email)) {
    10. /* 上面的判断式,决定发出邮件的必要条件:
    11. ($parent_id != '') && ($spam_confirmed != 'spam'): 回覆的, 而且不是 spam 才可发, 必需!!
    12. ($to != $admin_email) : 不发给 admin.
    13. ($comment_author_email == $admin_email) : 只有 admin 的回覆才可发.
    14. 可视个人需求修改以上条件.
    15. */
    16. $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
    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>您可以点击 <a href="' . htmlspecialchars(get_comment_link($parent_id)) . '">查看回应完整内容</a></p>
    26. <p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p>
    27. <p>(此邮件由系统自动发出, 请勿回覆.)</p>
    28. </div>';
    29. $from = "From: "" . get_option('blogname') . "" <$wp_email>";
    30. $headers = "$from\nContent-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. // -- END ----------------------------------------
    复制代码

    三、所有回覆都发邮件:(这个功能慎用,弄不好你就成为垃圾邮件制造者了哦,呵呵)
    (当然, 在底层的评论不发邮件, 回覆的才发)

    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>您可以点击 <a href="' . htmlspecialchars(get_comment_link($parent_id)) . '">查看回应完整内容</a></p>
    18. <p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p>
    19. <p>(此邮件由系统自动发出, 请勿回覆.)</p>
    20. </div>';
    21. $from = "From: "" . get_option('blogname') . "" <$wp_email>";
    22. $headers = "$from\nContent-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 ----------------------------------------
    复制代码

    发现这程式在评论分页的 get_comment_link() 有个 bug.
    这 bug 对使用 comments 和 trackbacks/pingbacks 分离的情况才会出现, 没分离的是没影响.
    当 直接叫用 get_comment_link() 因为没经过 wp_list_comments(‘type=comment’) 函数, 它会以所有的评论作为分页对象. 所以 trackbacks/pingbacks 数量多的时候会让 cpage 多算了, 本来是 cpage=7 会成了 cpage=8, 所以点击邮件里的 “查看回应完整内容” 会找不到正确评论页面.

    所以有必要将上面的

    1. get_comment_link($parent_id)
    复制代码

    改成:

    1. get_comment_link($parent_id, array('type' => 'comment'))
    复制代码

    加入的参数是让它选取 comment 数量计算就好.
    评论式样有使用 comments 和 trackbacks/pingbacks 分离的童鞋, 请进行修改. 没用到的就不用改.

    本站用的是第一种,效果如下方评论处;其他两种还没有测试。


    会员购买:>> 点击购买 << | 魔扣币购买:>> 点击购买 <<
    承接业务:服务器代维丨网站托管丨SEO
    联系客服:微信:morko-net | QQ:1367681973

    该用户从未签到

    2

    主题

    246

    回帖

    494

    积分

    中级魔扣

    Rank: 3Rank: 3

    魔扣币
    246
    贡献
    246
    威望
    0
    发表于 2017-1-4 18:38:09 | 显示全部楼层
    我也来顶一下..

    该用户从未签到

    1

    主题

    259

    回帖

    519

    积分

    高级魔扣

    Rank: 4

    魔扣币
    259
    贡献
    259
    威望
    0
    发表于 2017-4-9 06:33:22 来自手机 | 显示全部楼层
    人生就像是一次浪漫的旅游,每一站都会和不同的人擦肩,有的渐行渐远、有的从此结缘,我珍惜每一个有“缘”能结识的好友,忙碌的时候、魔扣源码论坛也没能忘记你曾带给我的每一份情谊。

    该用户从未签到

    3

    主题

    228

    回帖

    460

    积分

    中级魔扣

    Rank: 3Rank: 3

    魔扣币
    229
    贡献
    229
    威望
    0
    发表于 2017-9-12 12:49:16 | 显示全部楼层
    边撸边过

    该用户从未签到

    5

    主题

    256

    回帖

    518

    积分

    高级魔扣

    Rank: 4

    魔扣币
    256
    贡献
    256
    威望
    1
    发表于 2018-3-17 11:36:52 | 显示全部楼层
    说的不错~~~',魔扣源码论坛太好了

    该用户从未签到

    0

    主题

    252

    回帖

    504

    积分

    高级魔扣

    Rank: 4

    魔扣币
    252
    贡献
    252
    威望
    0
    发表于 2018-10-19 10:52:11 | 显示全部楼层
    楼下的接上
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 联系我们
    • 新浪微博 :
    • 在线客服 :魔扣科技 
    • 源码QQ群 :魔扣源码论坛官方总群
    • 联系邮箱 :charlin#morko.net
    • 微信扫一扫
    快速回复 返回顶部 返回列表