WordPress 评论回复邮件通知的实现

说实话蛮久没有好好捣鼓 WordPress 了,这几天一直在考虑 WordPress 评论回复邮件通知的实现。

由于之前管理员邮箱 (webmaster[at]mangguo.org) 架在 Google Apps 上面,导致一直收不到 WordPress 系统邮件。关于这个蛋疼无比的问题,可详细参考:http://ooxx.me/fail-to-receive-emails-with-google-apps.orz。

既然如此,为了强大的邮件通知功能,只好把邮局切换到主机供应商处,然后设置转发到 QQ 邮箱。保证 WordPress 邮件发送功能可用是实现这个邮件通知的首要条件。

关于实现评论回复邮件通知,百度一下你就知道。也有很多现成的插件可以使用。这里介绍的方法无需插件,只要一份 functions.php 文件和一小段 JavaScript 代码。

芒果采用了 Willin Kan 同学提供的方法,代码也很简单,只有二十几行:

<?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 = 'webmaster@' . preg_replace('#^www.#','',strtolower($_SERVER['SERVER_NAME']));
$to = trim(get_comment($parent_id)->comment_author_email);
$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)) . '>查看回应完整内容</a></p>
<p><strong>感谢你对 <a href=' . get_option('home') . ' target=_blank>' . get_option('blogname') . '</a> 的关注,欢迎<a href=' . get_option('home') . '/feed/ target=_blank>订阅本站</a></strong></p>
<p><strong>您可以直接回复此邮件与我联系~</strong></p>
</div>';
$from = From: . get_option('blogname') . <$wp_email>;
$headers = $fromContent-Type: text/html; charset= . get_option('blog_charset') . ;
wp_mail( $to,$subject,$message,$headers );
}
}
add_action('comment_post','comment_mail_notify');
?>
拷贝以上代码,另存为 functions.php 上传至当前模板目录。

根据 WordPress 的评论机制,判断某条评论是否为回复类型,需要通过 comment_parent 字段来识别。所以当某条评论被回复时,我们需要获得这个被回复评论的唯一 ID,将其和回复关联。

这里我们选择在评论发布表单中设定一个隐藏域,来存放刚刚那个临时 ID,并通过 JavaScript 为每条评论的“回复”链接绑定事件,动态改变隐藏域的 value 属性值。

<input type=hidden id=comment_parent name=comment_parent value= />JavaScript 代码(芒果这里用的是 jQuery)也很简单:

$('.reply').click(function(){
$('#comment_parent').val($(this).attr(rel));
});每个“回复”链接的 “rel” 属性中存放了当前评论的唯一 ID,通过 $comment -> comment_ID 输出即可。芒果已经测试成功。o(∩_∩)o 哈哈,也没啥技术含量,仅供把玩。

出处:http://www.mangguo.org/

相关文章

我想将wordpress的默认接口路由改掉,愿意是默认的带一个 wp...
wordpress自定义分类法之后,我看到链接都自动在后面添加了一...
事情是这样的,我用 get_post_type 函数创建了一个自定义分类...
最近网站莫名其妙的被顶上了,过一个多小时,就注册一个账号...
最近服务器要到期了,就想着把网站转移到另外一台服务器,本...
今天在写wordpress的接口,然后碰到个奇怪的问题,怎么访问都...