以前就注意到 wp 有这个功能了,可以在评论被回复时发邮件通知评论者,是个增强用户粘性的好方法。然而窝这犄角旮旯的能来几个人就不错了,哪有人闲得蛋疼来评论呢,所以咱也就没在意。

然而就在昨天,窝的博客迎来了激动人心的历史上的跨越:

有窝不认识的人发表了评论!

woc 窝当时心里真激动啊,这是评论者的一小步是人博客的一大步啊20150715224933

窝当时就抄起键盘准备回复,突然一想没有邮件通知玩个卵啊

遂搜索了一大堆方法,其中也踩了不少坑,在这里记录一下。

原生 wp 的邮件发送是使用 php 的 mail() 函数,这点在后台登陆页的忘记密码处可以得知。你可以在 探针 里查看你的 mail() 函数是否启用。使用 mail() 函数的方法请自行搜索。

首先去找一个启用 SMTP 的插件,这里推荐 Easy WP SMTP。配置不多说,请自行搞到能收到测试邮件。

如果你的主题自带回复提醒的话现在就可以测试一下了 // 坑1

对于没有这个功能主题,打开开主题的 function.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 = ‘reply@’ . preg_replace(‘#^www.#’, ‘’, strtolower($_SERVER[‘SERVER_NAME’])); //发件人邮件地址 $to = trim(get_comment($parent_id)->comment_author_email); $subject = ‘有人回复你在 ‘ . get_option(“blogname”) . ‘ 上的评论辣’; //酌情更改 $message = ‘

> 您在 ‘ . get_option(‘blogname’) . ‘ 博客上的留言有回复啦!

‘ . trim(get_comment($parent_id)->comment_author) . ‘ ,您曾在文章《’ . get_the_title($comment->comment_post_ID) . ‘》上发表评论:

‘ . nl2br(get_comment($parent_id)->comment_content) . ‘

‘ . trim($comment->comment_author) . ‘ 给您的回复如下:

‘ . nl2br($comment->comment_content) . ‘

您可以点击 查看回复的完整內容 。欢迎再次光临 ‘ . get_option(‘blogname’) . ‘

此邮件由系统自动发出,就算你回复了窝也不会回复你哟 ゚∀゚)σ

‘; $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 ); //echo ‘mail to ‘, $to, ‘
‘ , $subject, $message; // for testing } } add_action(‘comment_post’, ‘comment_mail_notify’); //窝还以为设置完 SMTP 后还要一些别的设置,没想到这里用了 wp 钩子就已经解决了(扶额

代码的意思看看函数名变量名之类的就可以懂了吧~

初次使用请将代码底部的 echo 反注释,方便调试

成功后发送的邮件大概是这样的:

> 您在 (ゝω·)~☆ kira 博客上的留言有回复啦!

printempw ,您曾在文章《关于》上发表评论:

TEST FOR MAIL

printempw 给您的回复如下:

FXCK U MAN

您可以点击 查看回复的完整內容 。欢迎再次光临 (ゝω·)~☆ kira

此邮件由系统自动发出,就算你回复了窝也不会回复你哟 ゚∀゚)σ

想要更改邮件样式请自行更改 $message 内的内容,窝也贴一段别的样式

$message = ‘
您在 ‘ . get_option(‘blogname’) . ‘ 上的留言有回复啦!

‘ . trim(get_comment($parent_id)->comment_author) . ‘, 您好!

您于’ . trim(get_comment($parent_id)->comment_date) . ‘ 在文章《’ . get_the_title($comment->comment_post_ID) . ‘》上发表评论:

‘ . nl2br(get_comment($parent_id)->comment_content) . ‘

‘ . trim($comment->comment_author) . ‘ 于’ . trim($comment->comment_date) . ‘ 给您的回复如下:

‘ . nl2br($comment->comment_content) . ‘

您可以点击 查看回复的完整內容

感谢你对 ‘ . get_option(‘blogname’) . ‘ 的关注,欢迎再次光临~(`・ω・)

(此邮件由系统自动发出,就算你回复了窝也不会回复你哟 ゚∀゚)σ)

‘;

这是预览:

您在 (ゝω·)~☆ kira 上的留言有回复啦!
H, 您好!

您于2015-07-26 14:29:42 在文章《关于》上发表评论:

AAA I WANT A MAIL

printempw 于2015-07-26 15:10:35 给您的回复如下:



您可以点击 查看回复的完整內容

感谢你对 (ゝω·)~☆ kira 的关注,欢迎再次光临~(`・ω・)

此邮件由系统自动发出,就算你回复了窝也不会回复你哟 ゚∀゚)σ

//关于坑1

应该是窝主题里的函数哪里出了问题害的窝 SMTP 不行 mail() 也不行折腾了一下午(扶额

如果你明明 SMTP 可以发件但是收不到回复邮件的话,可以在这个函数顶上写个 wp_mail() (参数自己看)来调试

上面的是在别处扒来的,不过这样的话那个评论复选框就没用了呢 20150717112829 等有时间窝在把判断逻辑也写进去

除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。