提醒:本文最后更新于 3492 天前,文中所描述的信息可能已发生改变,请仔细核实。
在上一个帖子的评论中,提到了跨文章跨页面悬浮显示 @ 评论支持(悬浮本文字可见效果)和新的自动@函数(修改了过滤器对象)。
先来说自动@函数,大发采用的还是前人写的通过comment_text过滤器校验。
这个过滤器对于sidebar(边栏)的最近评论,还有常用的wp_mail_notify(邮件提醒)都没有效果,因为这两样通常采用get_comment的方式,而且comment_text最终也是需要走get_comment的,所以把过滤对象换为get_comment。
具体函数,丢到functions.php替代老的@函数即可。
add_filter('get_comment', 'get_comment_add_at_parent'); function get_comment_add_at_parent($comment){ global $wpdb; if ($comment->comment_parent) { $parent_comment = get_comment($comment->comment_parent); $comment->comment_content = preg_replace('/<a href="#comment-([0-9]+)?".*?>(.*?)<\/a>:/i','',$comment->comment_content);//去除存在数据库里的@回复 $comment->comment_content = '<a href="#comment-' . $comment->comment_parent . '" class="atreply" rel="nofollow">@' . $parent_comment->comment_author . '</a>: ' . $comment->comment_content; } return $comment; }
说实在的,我不大喜欢这个函数,因为我觉得这个不大好,需要进行preg_replace替换数据库存有的@内容,浪费性能,虽说性能不值几个钱。
或许有人会说,自己本身数据库是没有@的。但是从你使用该函数后,如果你在后台编辑评论的话,编辑框是会有@的,当你编辑成功时,数据库就附带at了,如果这时不preg_replace就会有双at了。所以到头来,因为各种可能,preg_replace是必须的。
虽然我现在也启用了,但后续的,我可能还是用回传统的js添加法,评论时难看就难看吧。好歹搬家也能有个底。
说这么多,对于跨文章跨页面悬浮显示 @ 评论,一开始我对老杨说的思路就错了,想复杂了。在搞上面的过滤器时,想起直接用get_comment配合ajax就可以直接获取了。
首先在functions.php中添加如下代码,请根据需要修改。
add_action('init', 'load_comment_ajax'); function load_comment_ajax(){ if( isset($_GET['action']) && $_GET['action'] == 'ajax_load_comment' && isset($_GET['cmid']) ){ nocache_headers(); $comment = get_comment($_GET['cmid']); if(!$comment) die(); lopercomment($comment, null,null);//评论钩子方法自己改成自己主题的 die(); } }
js方面,为了使兼容性更好,方便各位复制后可直接使用,我采用了读取评论时,自动对@评论不存在的请求出来(隐藏在评论列表末尾)。这样的话,不用改变现有显示@的函数,就可以实现跨页面悬浮显示 @ 评论了。
js片段如下,加在适当的位置,确保读取分页评论也能得到重建。
$('.atreply').each(function(f){ var __atreplyid = $(this).attr('href'); if(!$(__atreplyid).is('.comment')) { var cmid = __atreplyid.slice(9); $.ajax({ url: home_url + "?action=ajax_load_comment&cmid=" + cmid, type: 'GET', dataType: 'html', success: function(data) { var AtCommentLoad = $(data + '</li>'); AtCommentLoad.hide().appendTo($('#thecomments')); } }); } });
特别提示,因为我定义了$即为jQuery,如果你不是采用相同方法,请将$替换为jQuery。
另外这种JQ请求方式,支持JQ大多数版本,兼容低版本JQ。
改进地方也有,就是鼠标悬停再ajax请求,这样可以节省请求。不过目前这样,体验比较好。
还有就是因为自己现有主题的js比较乱,所以文章正文暂显示不出来at的内容,如果你的原始显示at内容的js处理的比较好,以上代码,就可显示出来了。
好了,说到这里就不啰嗦太多了,工作上还比较忙。以上内容不提供各种帮助或解答,请自行参考学习,谢谢。(这些功能可能随时被取消)
另外,文章同步微博因CVE-2015-4024而导致的方法失效,已经更新为新方法(换了个接口而已,再次偷懒没使用multipart请求)。貌似已经正常工作了。还有拖了1年多的loper评论嵌套错位问题也解决了,貌似还有点小bug,回头再看看了。
转载请注明转自:kn007的个人博客的《跨文章跨页面悬浮显示@评论》
不错,功能很炫!
@草根成春: 还好啦,不是什么实用功能
略微有些复杂,先收藏再说吧。。。
这个不错!
好复杂,使用起来方便的话还不错
@爆糗段子: 其实也没什么作用
卡顿了一下。
@神秀: 可能哪里出问题了?
我这里正常
咦,居然有友情链接认证。。。
算了,想隐藏身份都不行了,滚回去做站了。
@神秀: 以前就有好吧,认link的好伐,你之前就是这个link,肯定会被标记起来的
@神秀: 话说,说好的ss呢
这效果简直太酷了!!!
@龙笑天: 还好~
我的怎么加上没效果呢?评论回调函数也修改了...