说实话蛮久没有好好捣鼓 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://www.mangguo.org/wordpress-comment-reply-email-announce-practice/" title="WordPress 评论回复邮件通知的实现" rel="bookmark">WordPress 评论回复邮件通知的实现 | 芒果小站</a>
已经有 40 条群众意见
- 万戈
#1/2010-07-03 06:24成功了?求测试~ 回应
- 丕子
#2/2010-07-03 07:30喜欢无插件。 回应
- 芒果 对 说
#3/2010-07-03 10:45关键在于 comment_parent 字段的问题,需要传参到表单。 回应
- 哲哲
#4/2010-07-03 12:51我也用的大师的代码实现,好东西。 回应
- wahyle
#5/2010-07-03 13:23我一直用的插件。。。等有时间了再折腾这个。 回应
- willin
#6/2010-07-03 14:57恭喜囉~ 回应
- 芒果 对 说
#7/2010-07-03 15:49willin 同学是台湾同胞吗? 回应
- willin 对 说
#8/2010-07-03 17:40是滴~ 來四川工作的台灣人。 順便一提:上面有個沒頭像的是 spam。 回应
- 竹纤维
#9/2010-07-04 00:35我使用插件实现的! 回应
- 午夜客
#10/2010-07-06 16:30测试看看,是不是有邮件! 回应
- Afio
#11/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 回应
- 晃晃
#12/2010-07-18 14:46还是没明白,能否解释下后两段代码的具体应用方法。 回应
- phoenix 对 说
#13/2010-07-20 14:53测试一下群回的效果。 回应
- qmdx 对 说
#14/2010-07-24 20:19菜鸟路过…没懂。前面一段加在 function.php,后面两段加哪呢.是不是 commont.php?还是修改评论的模板? 回应
- 山芋
#15/2010-08-01 15:49回复自己看有无邮件。 回应
- 山芋 对 说
#16/2010-08-01 16:03从原理上来看群回应该只会对最后一个产生效果。ps 博主把之前的测试留言都删了吧:p 回应
- 山芋
#17/2010-08-01 16:08另外想请教楼主在本页面中,回复相关的 jQuery 代码是放在哪里的,在资源里只找到了“显示资料”下拉的相关代码……谢谢啦。 回应
- 芒果 对 说
#18/2010-08-01 16:55首先把每个“回应”链接的 rel 属性设置为该条评论的评论 ID,然后为其绑定事件,把该 ID 赋值到隐藏域中。
$(‘.reply’).click(function(){
$(‘#comment_parent’).val($(this).attr(‘rel’));
return false;
}); 回应
- 山芋 对 说
#19/2010-08-01 19:33嗯,原理明白。本来是想问站长本人在这个页面上对于此功能的代码是放在哪里,之前没找到,现在看到了,和 jquery 放在一个文件里了。已经试验成功了,谢谢。 回应
- 无聊Ya!
#20/2010-09-01 13:22测试邮件来着。 回应
- “某某对某某说”的评论回应功能参数详解 - 无聊呀
#21/2010-09-10 12:16[...] WordPress 评论回复邮件通知的实现这篇博客中已经介绍过评论回复功能,WordPress 系统默认为评论预留了 [...] 回应
- Delbert
#22/2010-10-13 12:43我的用什么插件都不管用,这个先马克下,有空 FTP 下来试试。 回应
- freshways
#23/2010-10-19 09:05求测试,正需要这个功能,谢过博主。 回应
- freshways 对 说
#24/2010-10-19 09:05求测试。 回应
- xibeiwolf
#25/2010-10-19 12:19这个邮件提醒的代码是没有问题的,至于其他的还没有考究啊。。。继续研究。 回应
- xibeiwolf
#26/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 就是这个函数。。
多谢啦! 回应
- 邪客
#27/2010-10-26 14:58博主,我的死掉了,SOS! 回应
- 竹制品批发
#28/2010-11-06 15:22有人成功的吗? 回应
- 竹纤维
#29/2010-11-06 15:22偶终于知道了。 回应
- freshways
#30/2010-11-19 09:47求测试。 回应
- freshways 对 说
#31/2010-11-19 09:47回复自己看看效果,嘻嘻。 回应
- 老齐seo
#32/2010-11-29 10:43学习了,找很久了,希望有用。 回应
- xiao.z 对 说
#33/2010-12-01 16:32什么情况? 回应
- xiao.z 对 说
#34/2010-12-01 16:32看看先!~ 回应
- jason
#35/2010-12-03 17:49朋友很不错哦,呵呵,支持一下。 回应
- Sandy
#36/2010-12-18 22:45挺麻烦,用插件实现了。 回应
- 设计失控 对 说
#37/2011-05-14 13:36我的试了怎么不行呀? 回应
- 我爱聊吧!·
#38/2011-06-11 16:08请问下那个js 代码,放哪个文件呢? 回应
- 小小
#39/2011-08-03 20:58测试一下 回应
- 志慧
#40/2011-09-02 09:45嗯嗯~看看~我的不知道怎么回事更新了下版本就不能自动回复了~ 回应
我简单说几句