2011年10月24日 120条评论

整理: WordPress 评论回复邮件通知代码

这是自用的评论回复邮件通知代码,源码来自 WillinQiqiboy,有兴趣者可以去这两位作者博客看看。

这版本的评论回复通知是支持嵌套和@用户方式的。

用法很简单,把下面的代码扔到主题的 functions.php 里面即可(原则上要打开 WordPress 原生嵌套,具体木有去研究。)

* 代码放到 <?php ?>

 /* 邮件通知 by Qiqiboy */
 function comment_mail_notify($comment_id) {
     $comment = get_comment($comment_id);//根据id获取这条评论相关数据
     $content=$comment->comment_content;
     //对评论内容进行匹配
     $match_count=preg_match_all('/<a href="#comment-([0-9]+)?" rel="nofollow">/si',$content,$matchs);
     if($match_count>0){//如果匹配到了
         foreach($matchs[1] as $parent_id){//对每个子匹配都进行邮件发送操作
             SimPaled_send_email($parent_id,$comment);
         }
     }elseif($comment->comment_parent!='0'){//以防万一,有人故意删了@回复,还可以通过查找父级评论id来确定邮件发送对象
         $parent_id=$comment->comment_parent;
         SimPaled_send_email($parent_id,$comment);
     }else return;
 }
 add_action('comment_post', 'comment_mail_notify');
 function SimPaled_send_email($parent_id,$comment){//发送邮件的函数 by Qiqiboy.com
     $admin_email = get_bloginfo ('admin_email');//管理员邮箱
     $parent_comment=get_comment($parent_id);//获取被回复人(或叫父级评论)相关信息
     $author_email=$comment->comment_author_email;//评论人邮箱
     $to = trim($parent_comment->comment_author_email);//被回复人邮箱
     $spam_confirmed = $comment->comment_approved;
     if ($spam_confirmed != 'spam' && $to != $admin_email && $to != $author_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>您可以点击 <a href="' . htmlspecialchars(get_comment_link($parent_id,array("type" => "all"))) . '">查看回复的完整內容</a></p>
             <p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p>
             <p>(此邮件有系统自动发出, 请勿回复.)</p></div>';
         $from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
         $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
         wp_mail( $to, $subject, $message, $headers );
     }
 }

这篇是过渡文章,为下篇文章的代码做准备。

zww
or
oooo

“整理: WordPress 评论回复邮件通知代码”有120条评论

  1. snowinmay says:

    主题挺好看的~~

    1. kingf says:

      @snowinmay
      这个功能看似有点复杂。最好是弄成插件。

    2. zwwooooo says:

      @kingf
      其实这个动下手是很容易的

  2. [...] 上面的代码来自这里和这里,非本人所写。感谢这些牛人贡献的代码。 [...]

  3. 踏雪 says:

    你好,我用了Configure SMTP 这个插件,配置了自己的QQ邮箱,但是评论回复怎么都是写的由我空间商的服务器代发而不是QQ邮箱发送,这样邮件就都直接进入垃圾邮箱了。

    1. zwwooooo says:

      @踏雪
      如果你用的是我这篇文章的方法,那么就要修改文章中提供的代码,有注释,自己看看修改。

  4. 周游 says:

    将代码扔在functions.php中没有任何反应,也看不到评论条目上有回复按钮,是不是我还需要在comments.php中设置调用相关函数呀?请教了..

    1. zwwooooo says:

      @周游
      这是后台处理,前台不相干。另外你要检查你的主机支不支持mail()什么的

    2. 周游 says:

      @zwwooooo
      我的主机是有支持mail()的。我的站www.oldtime.me,请帮我看一下,评论回复还没有弄好.

    3. zwwooooo says:

      @周游
      看不出来的,这是后台执行的代码,有些主机支持mail()但是新版wp好像有个bug,你试试安装这个 Configure SMTP 插件再测试一下。

    4. zwwooooo says:

      @周游
      忘了说,安装 Configure SMTP 只要激活就可以,不用去设置。

  5. 手记阁 says:

    不知道为啥,别人发评论我能收到邮件,回复别人评论时就收不到

    1. zwwooooo says:

      @手记阁
      有时要检查一下主机支持。

    2. zwwooooo says:

      @手记阁
      忘了,WP3.3的邮件发送貌似有些bug,具体原因不知,可以考虑安装这个插件试试:Configure SMTP,安装后不用设置即可。

    3. 手记阁 says:

      @zwwooooo
      原因已经找到,是因为WP-Mail-SMTP插件进行了判断,不给非管理员的邮箱发邮件,修改源代码解决成功!

    4. zwwooooo says:

      @手记阁
      ……你用了这个插件就要自己先检查

  6. 小老翁 says:

    :grin: 谢谢,我的也尝试成功了!

  7. airoschou says:

    我评论回复速度其慢啊,网上搜索了原因说是这个;
    wp_mail( $to, $subject, $message, $headers );
    果然去掉后速度快了n倍!大叔有什么好的解决办法吗

    1. zwwooooo says:

      @airoschou
      1. 去掉此功能
      2. 换给力的服务器
      其它的就不知道了 :mrgreen:

    2. airoschou says:

      @zwwooooo
      原来如此。。我想数据库有什么优化功能

    3. zwwooooo says:

      @airoschou
      主机不给力时就会在检查和发送邮件卡,具体优化就不知道了,总觉得在小地方优化不如来个给力的主机。

  8. bbis says:

    我的主题不支持这种插入方式。。
    只能通过插件来实现了。

  9. [...] 此方法转载自zww.me,这版本的评论回复通知是支持嵌套和@用户方式的。有什么问题,请到作者页面反馈。 [...]

  10. operytu says:

    测试 我看看

  11. [...] 最后附上邮件自动回复功能参考文件:整理: WordPress 评论回复邮件通知代码 [...]

  12. Forece says:

    搜问题搜到你这了。。。我最近回复评论超慢。都不清楚哪出了问题。用的还是虚拟主机。注释掉wp_mail( $to, $subject, $message, $headers );也一样。怎么检测到底卡在哪了啊?

    1. zwwooooo says:

      @Forece
      有时很大问题是服务器不太行

  13. 阿邙 says:

    貌似不行了。。

    1. zwwooooo says:

      @阿邙
      这个需要主机支持

  14. woween says:

    好文,学习啦,有发送图片效果吗?

  15. xuexi says:

    B回复给A,B是游客;评论需要审核。

    上面代码出现的结果是,管理都没有审核B的评论。直接给A发邮件了。 博主能修正下这个问题吗?

    只能通过审核的评论才会邮件通知

  16. xuexi says:

    博主 不能解答下吗?

    1. zwwooooo says:

      @xuexi
      这个没折腾过,要给 SimPaled_send_email 函数前加个判断,最近忙,没时间去尝试。

    2. 大肥羊 says:

      @xuexi
      试试将 if ($spam_confirmed != 'spam' && $to != $admin_email && $to != $author_email) 改成 if ($spam_confirmed == '1' && $to != $admin_email && $to != $author_email)

      然后在
      add_action('comment_post', 'comment_mail_notify');
      下面添加一句add_action('comment_unapproved_to_approved', 'comment_mail_notify');

  17. hello says:

    我就想试试你的评论框好用不!

  18. 次克 says:

    马下 :razz:

  19. 唯美志 says:

    每个人的留言功能都好6666

发表评论

昵称 *

网址

B em del U Link Code Quote