我曾今在《折腾:5级嵌套改为2级嵌套 & 主评论内悬浮显示 @ 评论(唠叨篇)》这篇文章说过我的嵌套评论结构——所有嵌套评论用 jQuery 锁定到主评论下,用的是 Jinwen 的嵌套思路 实现的,但这样有个访客体验小问题:就是回复主评论下的嵌套评论时,回复框会跑到主评论上面去,对于访客的体验非常不好,容易晕。
前几天阿邙和qiqiboy同时写了关于实现无线嵌套评论的方法,认真拜读后,觉得阿邙的方法不适合我,觉得qiqiboy的方法非常适合我。
传送门:阿邙《WordPress嵌套评论之无限嵌套》《WordPress嵌套评论之无限嵌套之补遗》
qiqiboy的原理方法我不累说,具体到这里《完美解决WordPress嵌套回复的层深问题(无限嵌套)<一>》
下面我只说实现方法:(由于qiqiboy在文章贴的代码错误,我花了一些时间才发现问题所在,已去qiqiboy那里评论反馈)
1. 去WP后台设置评论嵌套层数,我设为2层
2. 打开主题 functions.php 找到评论回调函数,回复按钮一般都是利用默认函数comment_reply_link(),如下
<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
把其修改为
<?php if ($depth == get_option('thread_comments_depth')) : ?> <!-- 评论深度等于设置的最大深度 --> <!-- 将第二个参数改为父一级评论的id --> <a onclick="return addComment.moveForm( 'comment-<?php comment_ID() ?>','<?php echo $comment->comment_parent; ?>', 'respond','<?php echo $comment->comment_post_ID; ?>' )" href="?replytocom=<?php comment_ID() ?>#respond" class="comment-reply-link" rel="nofollow">Reply</a> <?php else: ?> <!-- 正常情况 --> <a onclick="return addComment.moveForm( 'comment-<?php comment_ID() ?>','<?php comment_ID() ?>', 'respond','<?php echo $comment->comment_post_ID; ?>' ) " href="?replytocom=<?php comment_ID() ?>#respond" class="comment-reply-link" rel="nofollow">Reply</a> <?php endif; ?>
3. 因为最后那层评论都是堆积在最后那层评论上一级,所以如果评论很多的话,就会出现不知道谁回复谁的情况,可以考虑我的评论给每个评论加上 @评论者 ,实现方法参考我以前写的《用 jQuery 实现点击回复之后显示@用户名的效果》
OK,搞定,具体效果看我博客的评论。
=======================
发呆时,延伸一下
PS一种情况(其实是我的情况):如果以前用的是5级嵌套,现在想用2级无限嵌套,如果按上面的方法实现无限嵌套回复,就会出现一个情况
什么情况呢?就是以前2级以后的嵌套评论都排在2级评论下面,混乱的很,那如何解决呢?我稍微想了下,两个步骤解决:
1. 修改一下判断条件$depth == get_option('thread_comments_depth')
当$depth等于后台设置的嵌套最大层数(这里是5)时,用特殊的 reply 链接,可以改一下,改为 $depth == 2
,也就是第2层使用特殊的 reply 链接
2. 因为设置了5层嵌套,第1步修改后第3、4层还是会出现 reply 链接,可以在style.cs加个css属性隐藏掉第3、4层的reply
ol.commentlist li ul.children li ul.children div.reply{display:none;}
/*意思是第3级以后的reply链接隐藏不显示*/
(其实可以写个 if 语句根据 $depth 的值显示 reply,这样就不用设置css了。反正举一反三,一个目的可以多种方式实现)
OK,解决。
- 本文标题:完美的WordPress无限嵌套回复方法
- 本文链接:https://zww.me/archives/25191
- 发布时间:2010年07月11日 10:18
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
好东西,已实现,我想问问,之前的评论嵌套有办法改回来么?之前的我也是设置5级想全部变为2级嵌套可以不?要不然评论样式乱了!
@折子戏
你把主题的评论样式支持到5级不就行了,当然,你可以把3、4、5级的样式写成2级一样。
@zwwooooo
试试看
@七支剑
试试
@七支剑 测试下
@折子戏 好东西 测试一下
请问lz,我怎么找不到comments_reply_link()函数啊,难道现在的版本不一样?
@janson
主题要有写回调函数才会有
@zwwooooo 具体是什么意思呢?看了几个主题,都没找到,那也太巧了吧。。
@zwwooooo
刚回复瞬间,我怎么看到了第三层
@janson
因为评论提交是ajax处理的,懒得去处理。
@janson
自己去看 wp_list_comments() 函数吧:http://codex.wordpress.org/Function_Reference/wp_list_comments,如果你主题的 wp_list_comments 没有设置回调参数,自然就没有。因为 wp_list_comments 本身就能工作,默认的回调函数给你的地址也有说明。
@zwwooooo
额,好复杂。无限嵌套是搞定了,但是@功能不好使,而且,我本来后台回复评论的时候,会自动加@,前台点reply是不会的。但改成无限嵌套之后,连后台回复评论都没@了。。
@janson
@功能要根据自己主题的评论结构调整jQery选择器……怎么说呢,这些都不能硬套的,稍微懂点 jQ 才行,用 firebug 调试吧,或者其他浏览器的调试工具(如Chrome的f12)。
Z大,现在在一楼层里不管回复谁都是回复给层主了,是这个的原因吗?
@锦程
本来就是这样处理的,都3、4年了吧,我把第三级后面的都归到一级了,嵌套太多不喜欢。