这是自用的评论回复邮件通知代码,源码来自 Willin、Qiqiboy,有兴趣者可以去这两位作者博客看看。
这版本的评论回复通知是支持嵌套和@用户方式的。
用法很简单,把下面的代码扔到主题的 functions.php 里面即可(原则上要打开 WordPress 原生嵌套,具体木有去研究。)
* 代码放到 <?php ?> 内
/* 邮件通知 by Qiqiboy */ function comment_mail_notify($comment_id) { $comment = get_comment($comment_id);//根据id获取这条评论相关数据 $content=$comment->comment_content; //对评论内容进行匹配 $match_count=preg_match_all('/<a href="#comment-([0-9]+)?" rel="nofollow">/si',$content,$matchs); if($match_count>0){//如果匹配到了 foreach($matchs[1] as $parent_id){//对每个子匹配都进行邮件发送操作 SimPaled_send_email($parent_id,$comment); } }elseif($comment->comment_parent!='0'){//以防万一,有人故意删了@回复,还可以通过查找父级评论id来确定邮件发送对象 $parent_id=$comment->comment_parent; SimPaled_send_email($parent_id,$comment); }else return; } add_action('comment_post', 'comment_mail_notify'); function SimPaled_send_email($parent_id,$comment){//发送邮件的函数 by Qiqiboy.com $admin_email = get_bloginfo ('admin_email');//管理员邮箱 $parent_comment=get_comment($parent_id);//获取被回复人(或叫父级评论)相关信息 $author_email=$comment->comment_author_email;//评论人邮箱 $to = trim($parent_comment->comment_author_email);//被回复人邮箱 $spam_confirmed = $comment->comment_approved; if ($spam_confirmed != 'spam' && $to != $admin_email && $to != $author_email) { $wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 發出點, no-reply 可改為可用的 e-mail. $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>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<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 ); } }
这篇是过渡文章,为下篇文章的代码做准备。
zww
赏
oooo
or
- 本文标题:整理: WordPress 评论回复邮件通知代码
- 本文链接:https://zww.me/archives/25536
- 发布时间:2011年10月24日 16:39
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
主题挺好看的~~
@snowinmay
谢谢
@snowinmay
这个功能看似有点复杂。最好是弄成插件。
@kingf
其实这个动下手是很容易的
[...] 上面的代码来自这里和这里,非本人所写。感谢这些牛人贡献的代码。 [...]
你好,我用了Configure SMTP 这个插件,配置了自己的QQ邮箱,但是评论回复怎么都是写的由我空间商的服务器代发而不是QQ邮箱发送,这样邮件就都直接进入垃圾邮箱了。
@踏雪
如果你用的是我这篇文章的方法,那么就要修改文章中提供的代码,有注释,自己看看修改。
将代码扔在functions.php中没有任何反应,也看不到评论条目上有回复按钮,是不是我还需要在comments.php中设置调用相关函数呀?请教了..
@周游
这是后台处理,前台不相干。另外你要检查你的主机支不支持mail()什么的
@zwwooooo
我的主机是有支持mail()的。我的站www.oldtime.me,请帮我看一下,评论回复还没有弄好.
@周游
看不出来的,这是后台执行的代码,有些主机支持mail()但是新版wp好像有个bug,你试试安装这个 Configure SMTP 插件再测试一下。
@周游
忘了说,安装 Configure SMTP 只要激活就可以,不用去设置。
不知道为啥,别人发评论我能收到邮件,回复别人评论时就收不到
@手记阁
有时要检查一下主机支持。
@手记阁
忘了,WP3.3的邮件发送貌似有些bug,具体原因不知,可以考虑安装这个插件试试:Configure SMTP,安装后不用设置即可。
@zwwooooo
原因已经找到,是因为WP-Mail-SMTP插件进行了判断,不给非管理员的邮箱发邮件,修改源代码解决成功!
@手记阁
……你用了这个插件就要自己先检查
谢谢,我的也尝试成功了!
@小老翁
慢慢折腾
我评论回复速度其慢啊,网上搜索了原因说是这个;
wp_mail( $to, $subject, $message, $headers );
果然去掉后速度快了n倍!大叔有什么好的解决办法吗
@airoschou
1. 去掉此功能
2. 换给力的服务器
其它的就不知道了
@zwwooooo
原来如此。。我想数据库有什么优化功能
@airoschou
主机不给力时就会在检查和发送邮件卡,具体优化就不知道了,总觉得在小地方优化不如来个给力的主机。
我的主题不支持这种插入方式。。
只能通过插件来实现了。
[...] 此方法转载自zww.me,这版本的评论回复通知是支持嵌套和@用户方式的。有什么问题,请到作者页面反馈。 [...]
测试 我看看
[...] 最后附上邮件自动回复功能参考文件:整理: WordPress 评论回复邮件通知代码 [...]
搜问题搜到你这了。。。我最近回复评论超慢。都不清楚哪出了问题。用的还是虚拟主机。注释掉wp_mail( $to, $subject, $message, $headers );也一样。怎么检测到底卡在哪了啊?
@Forece
有时很大问题是服务器不太行
貌似不行了。。
@阿邙
这个需要主机支持
好文,学习啦,有发送图片效果吗?
@woween
木有
B回复给A,B是游客;评论需要审核。
上面代码出现的结果是,管理都没有审核B的评论。直接给A发邮件了。 博主能修正下这个问题吗?
只能通过审核的评论才会邮件通知
博主 不能解答下吗?
@xuexi
这个没折腾过,要给 SimPaled_send_email 函数前加个判断,最近忙,没时间去尝试。
@xuexi
试试将 if ($spam_confirmed != 'spam' && $to != $admin_email && $to != $author_email) 改成 if ($spam_confirmed == '1' && $to != $admin_email && $to != $author_email)
然后在
add_action('comment_post', 'comment_mail_notify');
下面添加一句add_action('comment_unapproved_to_approved', 'comment_mail_notify');
我就想试试你的评论框好用不!
马下
每个人的留言功能都好6666
感谢分享,谢谢站长!!