芒果小站

  1. 全球最具业界良心的主机 - DigitalOcean

    毫无疑问,目前做得最好的主机供应商

    猛击这里查看

  2. 芒果小站目前使用的主机 - DigitalOcean

    客服响应快,随时退款,XEN 架构稳定

    猛击这里查看

  3. 最好的日本东京线路主机 - DigitalOcean

    可选弗里蒙特、达拉斯、亚特兰大、纽瓦克、伦敦、东京机房

    猛击这里查看

  • 1
  • 2
  • 3
切换到精简模式
42

WordPress 评论回复邮件通知的实现

作者 芒果/分类 教程/发布于 2010-07-03 02:25

说实话蛮久没有好好捣鼓 WordPress 了,这几天一直在考虑 WordPress 评论回复邮件通知的实现。

由于之前管理员邮箱 (webmaster[at]mangguo.org) 架在 Google Apps 上面,导致一直收不到 WordPress 系统邮件。关于这个蛋疼无比的问题,可详细参考:http://ooxx.me/fail-to-receive-emails-with-google-apps.orz

既然如此,为了强大的邮件通知功能,只好把邮局切换到主机供应商处,然后设置转发到 QQ 邮箱。保证 WordPress 邮件发送功能可用是实现这个邮件通知的首要条件。

关于实现评论回复邮件通知,百度一下你就知道。也有很多现成的插件可以使用。这里介绍的方法无需插件,只要一份 functions.php 文件和一小段 JavaScript 代码。

芒果采用了 Willin Kan 同学提供的方法,代码也很简单,只有二十几行:

<?php
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 = 'webmaster@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
$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>你可以点击 <a href="' . htmlspecialchars(get_comment_link($parent_id)) . '">查看回应完整内容</a></p>
<p><strong>感谢你对 <a href="' . get_option('home') . '" target="_blank">' . get_option('blogname') . '</a> 的关注,欢迎<a href="' . get_option('home') . '/feed/" target="_blank">订阅本站</a></strong></p>
<p><strong>您可以直接回复此邮件与我联系~</strong></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 );
}
}
add_action('comment_post', 'comment_mail_notify');
?>

拷贝以上代码,另存为 functions.php 上传至当前模板目录。

根据 WordPress 的评论机制,判断某条评论是否为回复类型,需要通过 comment_parent 字段来识别。所以当某条评论被回复时,我们需要获得这个被回复评论的唯一 ID,将其和回复关联。

这里我们选择在评论发布表单中设定一个隐藏域,来存放刚刚那个临时 ID,并通过 JavaScript 为每条评论的“回复”链接绑定事件,动态改变隐藏域的 value 属性值。

<input type="hidden" id="comment_parent" name="comment_parent" value="" />

JavaScript 代码(芒果这里用的是 jQuery)也很简单:

$('.reply').click(function(){
    $('#comment_parent').val($(this).attr(rel));
});

每个“回复”链接的 “rel” 属性中存放了当前评论的唯一 ID,通过 $comment -> comment_ID 输出即可。芒果已经测试成功。o(∩_∩)o 哈哈,也没啥技术含量,仅供把玩。

版权所有,转载请注明出处。
转载自 <a href="http://mangguo.org/wordpress-comment-reply-email-announce-practice/" title="WordPress 评论回复邮件通知的实现" rel="bookmark">WordPress 评论回复邮件通知的实现 | 芒果小站</a>
如果喜欢这篇文章,欢迎订阅芒果小站以获得最新内容。

已经有 42 条群众意见

  1. 万戈 /2010-07-03 06:24

    成功了?求测试~ 回应

    #1
  2. 丕子 /2010-07-03 07:30

    喜欢无插件。 回应

    #2
  3. 芒果万戈/2010-07-03 10:45

    关键在于 comment_parent 字段的问题,需要传参到表单。 回应

    #3
  4. 哲哲 /2010-07-03 12:51

    我也用的大师的代码实现,好东西。 回应

    #4
  5. wahyle /2010-07-03 13:23

    我一直用的插件。。。等有时间了再折腾这个。 回应

    #5
  6. willin /2010-07-03 14:57

    恭喜囉~ 回应

    #6
  7. 芒果willin/2010-07-03 15:49

    willin 同学是台湾同胞吗? 回应

    #7
  8. willin芒果/2010-07-03 17:40

    是滴~ 來四川工作的台灣人。 順便一提:上面有個沒頭像的是 spam。 回应

    #8
  9. 竹纤维 /2010-07-04 00:35

    我使用插件实现的! 回应

    #9
  10. 午夜客 /2010-07-06 16:30

    测试看看,是不是有邮件! 回应

    #10
  11. Afio /2010-07-14 19:57

    日啊 ,我 Thread comment, Mail to comment 都搞上了依旧不行。。。。再试试这个 ,再不行回去挖煤去
    PS: 。。。百度一下。。。我 Google 的,恭喜你在关键字“实现评论邮件回复“页面上你排第2。。。。。不信自己看 http://www.google.com.hk/search?sourceid=chrome&ie=UTF-8&q=%E5%AE%9E%E7%8E%B0%E8%AF%84%E8%AE%BA%E9%82%AE%E4%BB%B6%E5%9B%9E%E5%A4%8D 回应

    #11
  12. 晃晃 /2010-07-18 14:46

    还是没明白,能否解释下后两段代码的具体应用方法。 回应

    #12
  13. phoenix万戈/2010-07-20 14:53

    测试一下群回的效果。 回应

    #13
  14. qmdx哲哲/2010-07-24 20:19

    菜鸟路过…没懂。前面一段加在 function.php,后面两段加哪呢.是不是 commont.php?还是修改评论的模板? 回应

    #14
  15. 山芋 /2010-08-01 15:49

    回复自己看有无邮件。 回应

    #15
  16. 山芋phoenix/2010-08-01 16:03

    从原理上来看群回应该只会对最后一个产生效果。ps 博主把之前的测试留言都删了吧:p 回应

    #16
  17. 山芋 /2010-08-01 16:08

    另外想请教楼主在本页面中,回复相关的 jQuery 代码是放在哪里的,在资源里只找到了“显示资料”下拉的相关代码……谢谢啦。 回应

    #17
  18. 芒果山芋/2010-08-01 16:55

    首先把每个“回应”链接的 rel 属性设置为该条评论的评论 ID,然后为其绑定事件,把该 ID 赋值到隐藏域中。
    $(‘.reply’).click(function(){
    $(‘#comment_parent’).val($(this).attr(‘rel’));
    return false;
    }); 回应

    #18
  19. 山芋芒果/2010-08-01 19:33

    嗯,原理明白。本来是想问站长本人在这个页面上对于此功能的代码是放在哪里,之前没找到,现在看到了,和 jquery 放在一个文件里了。已经试验成功了,谢谢。 回应

    #19
  20. 无聊Ya! /2010-09-01 13:22

    测试邮件来着。 回应

    #20
  21. ?
    “某某对某某说”的评论回应功能参数详解 - 无聊呀 /2010-09-10 12:16

    […] WordPress 评论回复邮件通知的实现这篇博客中已经介绍过评论回复功能,WordPress 系统默认为评论预留了 […] 回应

    #21
  22. Delbert /2010-10-13 12:43

    我的用什么插件都不管用,这个先马克下,有空 FTP 下来试试。 回应

    #22
  23. freshways /2010-10-19 09:05

    求测试,正需要这个功能,谢过博主。 回应

    #23
  24. freshwaysfreshways/2010-10-19 09:05

    求测试。 回应

    #24
  25. xibeiwolf /2010-10-19 12:19

    这个邮件提醒的代码是没有问题的,至于其他的还没有考究啊。。。继续研究。 回应

    #25
  26. xibeiwolf /2010-10-19 14:45

    验证了。。
    可以。

    不过我在发表留言的时候(文件comments.php)加了一句
    $comment_parent = isset($_POST[‘comment_parent’]) ? absint($_POST[‘comment_parent’]) : 0;
    if($comment_parent>0){
    comment_mail_repay($comment_ID);
    }

    其中 comment_mail_repay 就是这个函数。。
    多谢啦! 回应

    #26
  27. 邪客 /2010-10-26 14:58

    博主,我的死掉了,SOS! 回应

    #27
  28. 竹制品批发 /2010-11-06 15:22

    有人成功的吗? 回应

    #28
  29. 竹纤维 /2010-11-06 15:22

    偶终于知道了。 回应

    #29
  30. freshways /2010-11-19 09:47

    求测试。 回应

    #30
  31. freshwaysfreshways/2010-11-19 09:47

    回复自己看看效果,嘻嘻。 回应

    #31
  32. 老齐seo /2010-11-29 10:43

    学习了,找很久了,希望有用。 回应

    #32
  33. xiao.z老齐seo/2010-12-01 16:32

    什么情况? 回应

    #33
  34. xiao.zxiao.z/2010-12-01 16:32

    看看先!~ 回应

    #34
  35. jason /2010-12-03 17:49

    朋友很不错哦,呵呵,支持一下。 回应

    #35
  36. Sandy /2010-12-18 22:45

    挺麻烦,用插件实现了。 回应

    #36
  37. 设计失控万戈/2011-05-14 13:36

    我的试了怎么不行呀? 回应

    #37
  38. 我爱聊吧!· /2011-06-11 16:08

    请问下那个js 代码,放哪个文件呢? 回应

    #38
  39. 小小 /2011-08-03 20:58

    测试一下 回应

    #39
  40. 志慧 /2011-09-02 09:45

    嗯嗯~看看~我的不知道怎么回事更新了下版本就不能自动回复了~ 回应

    #40
  41. 小老翁 /2012-05-15 22:01

    呵呵,谢谢。我的也成功了! 回应

    #41
  42. ?
    求助 @reply 回复邮件提醒 - WordPress - 开发者 /2013-06-18 19:03

    […] 芒果在WordPress 评论回复邮件通知的实现中提到,将@reply结合Willin Kan提供的代码,实现回复邮件提醒.鄙人不才,芒果给了3段代码,第二我不知道怎么用.这样的回复样式比套嵌的要舒服多了 […] 回应

    #42

下面我简单说几句