本文转载自:露兜博客
给WordPress添加评论回复邮件提醒功能,目前已成为WordPress博客的标配,不仅可以大大提高用户体验,还可以增加访客的回头率。 偶然发现,这是一项很危险的功能,目前网上流行的代码版本很容易被一些别有用心的人利用: 我可以给你博客的所有评论都回复一遍,不仅在你的博客留下了垃圾评论,垃圾内容也通过评论回复提醒邮件顺带发出去了。 无需花费心思去获取评论者的邮件地址,也不用担心评论是否还在等待审核,垃圾广告内容顺利发出,欧耶! 很多博客都宣扬不会泄漏评论者的email,但是如果这个bug被人利用,你的博客倒成了垃圾邮件的发送者,这岂不是很搞笑?
解决办法 {#menu_index_1}
Step 1: {#menu_index_2}
进入WordPress后台 - 设置 - 讨论,勾选"评论必须经人工批准",这样所有评论必须经过管理员审核才能显示,虽然有点麻烦,但是我觉得这是博主应该负起的一项责任。
Step 2: {#menu_index_3}
接着我们需要将之前的评论回复邮件提醒的代码做些修改。 我设计的运行机制是这样的:对于管理员和编辑的评论回复,可以直接给评论者发送提醒邮件;对于普通访客发表的评论,先让它在待审评论中呆着,等博主审核后,再给评论者发送提醒邮件。下面是一个评论回复邮件提醒的代码范例,使用的是所有评论回复都发送邮件通知的版本,如果你需要其他功能,请参考网上的代码进行修改:
/**
* WordPress评论回复邮件提醒防垃圾评论版
* 作者:露兜
* 博客:https://www.ludou.org/
*
* 2014年7月5日 :
* 首个版本
*/
function ludou_comment_mail_notify($comment_id, $comment_status) {
// 评论必须经过审核才会发送通知邮件
if ($comment_status !== 'approve' && $comment_status !== 1)
return;
$comment = get_comment($comment_id);
if ($comment->comment_parent != '0') {
$parent_comment = get_comment($comment->comment_parent);
// 邮件接收者email
$to = trim($parent_comment->comment_author_email);
// 邮件标题
$subject = '您在[' . get_option('blogname') . ']的留言有了新的回复';
// 邮件内容,自行修改,支持HTML
$message = '
<p>Hi, ' . $parent_comment->comment_author . '</p>
<p>您之前在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
. $parent_comment->comment_content . '</p>
<p>' . $comment->comment_author . ' 给您回复:<br />'
. $comment->comment_content . '<br /><br /></p>
<p>您可以 <a href="' . htmlspecialchars(get_comment_link($comment->comment_parent)) . '">点此查看回复完整內容</a></p>
<p>欢迎再度光临 <a href="'.home_url().'">' . get_option('blogname') . '</a></p>
<p>(此邮件由系统自动发送,请勿回复)</p>';
$message_headers = 'Content-Type: text/html; charset="' . get_option('blog_charset') . '"\n';
// 不用给不填email的评论者和管理员发提醒邮件
if($to != '' && $to != get_option('admin_email'))
@wp_mail($to, $subject, $message, $message_headers);
}
}
// 编辑和管理员的回复直接发送提醒邮件,因为编辑和管理员的评论不需要审核
add_action('comment_post', 'ludou_comment_mail_notify', 20, 2);
// 普通访客发表的评论,等博主审核后再发送提醒邮件
add_action('wp_set_comment_status', 'ludou_comment_mail_notify', 20, 2);
将以上代码加在主题的functions.php
模板函数里 最后,还是希望看过这篇文章的网友不要去干坏事哦。 好了,有什么问题,包括本文涉及代码的小修改等,可以在此给我留言。