wordpress增加评论回复邮件通知

网上搜了一下wordpress评论回复发送邮件通知的插件,基本上都是很久没更新了的,不知道是否还支持新版。也搜到很多无插件实现发送邮件通知,综合了几个最终修改为满足我需的求代码,

1.我有开启评论审核,评论的回复,在被审核通过时,会发送一封邮件给被回复的评论作者
2.已有评论资格的人回复某条评论,会直接发送邮件被回复的给评论作者
3.管理员后台回复时,会直接发送邮件给评论者

以下是我修改后的代码(下面的代码加在当前主题的functions.php最下面“?>”这一行之前,这段代码前提是要程序先支持发送邮件,不支持的可以使用插件,我这里用的是“WP-Mail-SMTP”):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//评论回复被审核之后发送邮件通知
function commit_reply_approved($comment) {
$parent_id = $comment->comment_parent ? $comment->comment_parent : '';
$spam_confirmed = $comment->comment_approved;
if (($parent_id != '') && ($spam_confirmed == '1')) {
$post_link = get_permalink($comment->comment_post_ID);
$wp_email = 'admin@proliang.com';
$to = trim(get_comment($parent_id)->comment_author_email);
$author_email=$comment->comment_author_email;//评论人邮箱
$admin_email = get_bloginfo ('admin_email');//管理员邮箱
if($to == $admin_email || $to == $author_email) {
return;
}
$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>您在《<a href="'.$post_link.'">'. get_the_title($comment->comment_post_ID) . '</a>》发表的评论:<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,array("type" => "all"))) . '">查看回复的完整內容</a></p>
<p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p>
<p>(此邮件由系统自动发送,请勿回复.)</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_unapproved_to_approved', 'commit_reply_approved');
//评论被有资格的人回复时,直接发送邮件通知
function commit_reply_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 == '1')) {
$post_link = get_permalink($comment->comment_post_ID);
$wp_email = 'admin@proliang.com';
$to = trim(get_comment($parent_id)->comment_author_email);
$author_email=$comment->comment_author_email;//评论人邮箱
$admin_email = get_bloginfo ('admin_email');//管理员邮箱
if($to == $admin_email || $to == $author_email) {
return;
}
$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>您在《<a href="'.$post_link.'">'. get_the_title($comment->comment_post_ID) . '</a>》发表的评论:<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,array("type" => "all"))) . '">查看回复的完整內容</a></p>
<p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p>
<p>(此邮件由系统自动发送,请勿回复.)</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', 'commit_reply_notify');

后记

其实感觉还是会者不难,难者不会,虽然写了不少年程序了,php这玩意儿毕竟没有系统的学习过,改这段代码也费了点时间。
主要还是在于这2个add_action, “comment_post”是表示评论被保存,此时判断是有资格的,就发送。另外一个”comment_unapproved_to_approved”是表示,评论被批准通过,此时如果该评论如果是回复别人的另外一条评论的,那么就发邮件给被回复的人!

另外其实我的functions.php还有一些其他的修改,也蛮有用,有需要的可以看看functions.php修改记录