与人为善,福虽未致祸已远兮 与人为恶,祸虽未致福已远兮

前台回复评论不能发送邮件的解决方法

技术文档 6782浏览 0评论

我使用的皮肤(http://loosky.net/?p=1541)里面提供了回复评论时会发送邮件通知的功能,使用的是Comment Mail Notify,一直以为是可以正常使用的。但是ISayMe同学提醒我说他从来都没有收到过我的回复邮件,我开始以为是跟Akismet有冲突,因为我的用法稍微有些特殊。

经过测试,发现在后台回复是可以收到邮件通知的,但是在前台直接回复的话,好像就不可以。于是乎,我检查了一下comment_mail_notify中的代码,发现需要满足$parent_id != '' && $spam_confirmed != 'spam' && $notify == '1'这几个条件,才会正常发送邮件。而$notify的值又是由$parent_id来确定的,于是乎,出现异常应该就是跟这个$parent_id有关了。而$parent_id是直接从数据中读取出来的,我查看了数据库,发现其值是等于0,问题应该就出现在这里了。

找到了commentajax.php中有这样一段代码:

$comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0;

这个comment_parent是由系统函数comment_id_fields()自动生成的,查看文章页的源代码,发现有这样的内容:

<input type='hidden' name='comment_parent' id='comment_parent' value='0' />

根据 WordPress 的评论机制,判断某条评论是否为回复类型,需要通过 comment_parent 字段来识别。所以当某条评论被回复时,我们需要获得这个被回复评论的唯一 ID,将其和回复关联。Philna2/Loosky中缺少了这个功能代码,所以会导致回复时获取不到parent_id,自然在读取的时候,这个值也就是不正确的了。

找到了原因,那么就比较好解决了。通过为每条评论的“回复”链接绑定事件,动态改变隐藏域comment_parent的 value 属性值就可以了。

具体解决办法:

1、修改“回复评论”连接的代码,链接的 “rel” 属性中存放了当前评论的唯一 ID。

<a rel="<?php comment_ID() ?>" href="#comment-<?php comment_ID() ?>" title="<?php _e('Reply this comment',YHL); ?>"><?php _e('Reply', YHL); ?></a>

2、为每条评论的“回复”链接绑定事件:

$('.reply').click(function(){
    $('#comment_parent').val($(this).attr(rel));
});

这样在回复评论的时候就可以获取到parent_id的值,前台回复评论时不能发送邮件的问题也就可以解决了。

Loosky皮肤中的解决方法会略有不同,请重新下载代码。

转载请注明:自由的风 » 前台回复评论不能发送邮件的解决方法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (7)

  1. 我回复评论用的是 修改版的mail to commenter插件.一般我都是在前台回复.貌似没出现过什么问题.请问博主.要是我想拿这个函数放在原生的philna2主题(没修改过的)上,该怎么修改一下这个函数,使之能够正常工作呢?主要是我想把这个函数放到我目前使用的主题上.以便再去掉一个插件,所以请博主再指点一下啦. ;-)

    ISayMe2011-04-24 17:44 回复
  2. 额 我上传了您的loosky主题中的那个comment_mail_notify.php文件到我现在使用的主题中.发现不论在前台还是后台都无法接收到邮件.请教该怎么办?才能让他正常工作?请博主告诉下需要修改什么文件??该添加或者修改什么语句? 虽然您的主题很好了.但是自己现在用的主题我改的太多了,适合了我的性子,所以请博主告诉下该怎么移植到我现在的主题中.谢谢啦. :smile:

    ISayMe2011-04-24 18:01 回复
    • philna2.js和app/comment.php这两个文件,参照我的文章,对比看一下。

      自由的风2011-04-24 18:42 回复
      • @自由的风
        将$ (‘.reply’).click(function(){
        $(‘#comment_parent’).val($(this).attr(rel));
        });这段代码放到philna2.js文件中,然后再修改comment.php文件,将rel=” nofollow”换成rel=”<?php comment_ID() ?>”就可以了吧?
        我去试试.有问题会再来请教博主的哟 ;-)

        ISayMe2011-04-24 19:05
  3. 我用的是 mail to comments

    IM路人2011-04-26 15:38 回复
    • 这个可以减少一个插件,而且比较好用。

      自由的风2011-04-26 20:11 回复