给 WordPress 网站评论回复邮件提醒功能,可以通过邮件通知评论者的自己的评论被回复,很大程度提高了用户体验,同时增加访客的回头访问率,因此很受 WordPress 站长的喜欢。但是博主发现目前流传的邮件提醒代码存在重大的 bug 。

我可以给你博客的所有评论都回复一遍,不仅在你的博客留下了垃圾评论,垃圾内容也通过评论回复提醒邮件顺带发出去了。

无需花费心思去获取评论者的邮件地址,也不用担心评论是否还在等待审核,垃圾广告内容顺利发出,欧耶!

如果这个 bug 被人利用,博客将成为垃圾邮件的发送者,不仅对评论用户,对自己博客的危险都非常大。

解决方法:

1 、进入 WordPress 后台 – 设置 – 讨论,勾选」 评论必须经人工批准」,这样所有评论必须经过管理员审核才能显示,虽然有点麻烦,但是我觉得这是博主应该负起的一项责任。

2 、接着需要将之前的评论回复邮件提醒的代码做些修改。

新设计的运行机制是这样的:对于管理员和编辑的评论回复,可以直接给评论者发送提醒邮件;对于普通访客发表的评论,先让它在待审评论中呆着,等博主审核后,再给评论者发送提醒邮件。

下面是一个评论回复邮件提醒的代码范例,使用的是所有评论回复都发送邮件通知的版本,如果你需要其他功能,请参考网上的代码进行修改:

function ludou_comment_mail_notify($comment_id, $comment_status) {
// 评论必须经过审核才会发送通知邮件
if ($comment_status !== 'approve'%20<span%20style="color: #339933;">&& $comment_status !== 1)
return;

$comment = get_comment($comment_id);

if ($comment->comment_parent != '0'<span%20style="color: #009900;">) {
$parent_comment = get_comment($comment->comment_parent);

// 邮件接收者 email
$to = trim($parent_comment->comment_author_email);

// 邮件标题
$subject = '您在

['%20<span%20style="color: #339933;">. get_option("blogname") . '] 的留言有了新的回复'<span%20style="color: #339933;">;

// 邮件内容,自行修改,支持 HTML
$message = '
<p>Hi, '%20<span%20style="color: #339933;">. $parent_comment->comment_author . '</p>
<p> 您之前在 《'%20<span%20style="color: #339933;">. get_the_title($comment->comment_post_ID) . '》 的留言:<br />'
. $parent_comment->comment_content . '</p>
<p>'%20<span%20style="color: #339933;">. $comment->comment_author . ' 给您回复:<br />'
. $comment->comment_content . '<br /><br /></p>
<p> 您可以 <a href="'%20<span%20style="color: #339933;">. htmlspecialchars(get_comment_link($comment->comment_parent)) . '"> 点此查看回复完整內容</a></p>
<p> 欢迎再度光临 <a href="'<span%20style="color: #339933;">.home_url().'">'%20<span%20style="color: #339933;">. get_option('blogname'<span%20style="color: #009900;">) . '</a></p>
<p>(此邮件由系统自动发送,请勿回复)</p>'<span%20style="color: #339933;">;

$message_headers = "Content-Type: text/html; charset="".get_option('blog_charset'<span%20style="color: #009900;">).""
";

// 不用给不填 email 的评论者和管理员发提醒邮件
if($to != ''%20<span%20style="color: #339933;">&& $to != get_bloginfo('admin_email'<span%20style="color: #009900;">))
@wp_mail($to, $subject, $message, $message_headers);
}
}

// 编辑和管理员的回复直接发送提醒邮件,因为编辑和管理员的评论不需要审核
add_action('comment_post'<span%20style="color: #339933;">, 'ludou_comment_mail_notify'<span%20style="color: #339933;">, 20, 2);

// 普通访客发表的评论,等博主审核后再发送提醒邮件
add_action('wp_set_comment_status'<span%20style="color: #339933;">, 'ludou_comment_mail_notify'<span%20style="color: #339933;">, 20, 2);