评论回复就是说如果你在一个博客或者网站上留了言,当有人回复你的时候,系统就会自动发一封邮件通知你。我最早在万戈那里留言的时候,就体会到的评论回复在用户体验上是很友好的。最近逛的博客多了,才发现几乎所有的博客都有评论回复功能。那好吧,我就也给小站增加一个邮件回复的功能。
最快最方便的方法就是使用插件,这样的插件很多,就不在这里多说了,再说我也没有使用过,也不好评价那一个插件好用。本文介绍的是自己动手,添加一些代码实现邮件回复的功能。
wp_mail函数简介
不知道大家有没有注意过,在wordpress安装成功后,会向你的邮件中发送一封邮件。从这一点就可以看出worpress自带有发送邮件的功能。而且控制台里也可以设置当日志有新评论的时候邮件通知。就是从这里下手,我找到了这个wp_mail函数,它的功能就是发送邮件。该函数定义在wp-includes目录下的plaggable.php文件中,其原型为
wp_mail( $to, $subject, $message, $headers = '', $attachments = array() )
其中参数$to代表收件人,$subject是邮件主题。通过$header可以设置发件人信息,比如发件人名称、email地址(Name <email@address.com>)等,还可以设置邮件的文本格式,默认是text/plain,该格式不支持html格式。如果想使用html格式,就要设置为text/html。具体设置的方法是传递一个字符串,如
$headers = "from:Domety <ddbug@domety.com>\n content-type:text/html"
注意中间是以\n隔开。或者传递一个数组,如
$headers = array("from" => "Domety <ddbug@domety.com>","content-type" = "text/html" );
最后还可以通过$attachments参数来发送附件。
action : wp_insert_comment
有了发送邮件的函数,就可以说是万事具备,只欠东风了。我们需要准确的知道在什么时候要发送邮件,我觉得至少要符合以下条件:
- 在有人发表评论的时候,这时候wordpress会调用wp_insert_comment函数。
- 该评论不是直接对日志的评论,而是回复的另一个评论。也就是这个评论一定要有parent.
- 该评论是通过审核的评论。也就是说approved == 1
- 被回复的评论要有email地址。
wp_inset_comment函数为开发人员提供了一个叫做wp_insert_comment的action,通过它我们可以很方便的完成对以上条件的审查工作。我们首先定义一个 dm_notify_commentauthor($comment_id,$comment)函数,用来处理邮件通知用户。然后增加一个action
add_action('wp_insert_comment','dm_notify_commentauthor',10,2);
这样一来,当有用户回复另一个人的评论的时候,就会邮件通知另一个人。至此我们的全部工作就做完了。以下是完整代码,添加到functions.php文件中即可生效。
function dm_notify_commentauthor($comment_id,$comment) {
if($comment->comment_approved != 1 || $comment->comment_type == 'trackback' || $comment->comment_type == 'pingback' || $comment->comment_parent == 0 )
return $comment_id;
$parent = get_comment($comment->comment_parent);
if(empty($parent->comment_author_email))
return $comment_id;
$post = get_post($comment->comment_post_ID);
$to = $parent->comment_author_email;
$from_name = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);s;
$from_email = "ddbug@domety.com";
$mail_content_type = "text/html";
$mail_headers = "from:$from_name <$from_email>\ncontent-type:$mail_content_type";
$parent_name = empty($parent->comment_author) ? '无名仕' : $parent->comment_author;
$cur_name = empty($comment->comment_author) ? '无名仕' : $comment->comment_author;
$title = $cur_name.'回复了您在Domety.com的评论';
$msg = '<p>'.$parent_name.',您好!</p>';
$msg .= '您在<a href="'.get_permalink($post).'" style="text-decoration:none; color: #007EC4;">《'.$post->post_title.'》</a>的评论:';
$msg .= '<p style="margin-left:50px; background:#fff;border:1px dashed #7C98B1;padding:10px 30px;">'.$parent->comment_content.'</p>';
$msg .= '<p><a href="'.$comment->comment_author_url.'" style="text-decoration:none; color: #007EC4;">'.$cur_name.'</a>对您的回复:</p>';
$msg .= '<p style="margin-left:50px; background:#fff;border:1px dashed #7C98B1;padding:10px 30px;">'.$comment->comment_content.'</p>';
$msg .= '<p><a href='.get_comment_link($comment).' style="text-decoration:none; color: #007EC4;">点此查看原始回复内容</a></p>';
$msg .= "<p style='font-weight:bold'>衷心的感谢您对 <a href='http://domety.com/' style='text-decoration:none; color: #007EC4;'>Domety</a> 的关注和支持,欢迎 <a href='http://feed.domety.com/' style='text-decoration:none; color: #007EC4;'>订阅本站</a>,以获取最新信息。</p>";
$msg = '<div style="border:1px solid #7C98B1; background:#f1f1f1; padding:50px;font-size:16px;">'.$msg.'</div>';
@wp_mail($to,$title,$msg,$mail_headers);
return $comment_id;
}
add_action('wp_insert_comment','dm_notify_commentauthor',10,2);
路大侠
2010-04-20 星期二 23:15
友情链接
2010-04-20 星期二 23:38
SKYOY
2010-04-21 星期三 19:19
DDBug
2010-04-21 星期三 19:53
ifenwen
2010-05-06 星期四 10:28
洁
2010-05-25 星期二 11:03
某人
2010-05-27 星期四 15:32
lveyo
2010-07-06 星期二 14:12
merror
2010-07-18 星期天 18:17
iwobz
2010-08-15 星期天 20:15
iwobz
2010-08-15 星期天 21:37
Mercury
2010-08-18 星期三 13:43
晨光博客
2011-01-28 星期五 00:08
番茄
2011-03-15 星期二 00:02
番茄
2011-05-06 星期五 22:32