》最新代码移步到这里:只在WP主评论加上楼层号的方法『支持顺序、倒序』(2012.11.17)
很久没折腾 WordPress 相关的伪技术了,今天突然想起自从 WordPress 2.7 支持嵌套后久久没实现的评论楼层号,如果按照老式的方法给主评论和嵌套评论都加上楼层号,我个人认为是没有什么意义的,而且感觉会乱七八糟,但是只为主评论加上楼层号,那么就不同了,因为每层楼就是一个讨论组,可以当作是一个论坛贴,嵌套评论就是参加讨论的人。
我记得4月份在《凤凰不归巢》那里看到一篇文章《WP非插件显示谁坐了沙发》里面有相关主次评论判断方法,于是今早无聊就折腾了一番,没想到真给我折腾出来了。
效果看我现在用的主题 zSnos 的评论,下面是方法
前提:
1. 当然是要在 WordPress 后台开启嵌套评论和评论分页
2. 所用主题支持嵌套(目前的主题基本都支持吧)
3. 主题有使用 mytheme_comment 回调函数(http://codex.wordpress.org/Template_Tags/wp_list_comments)
下面拿默认的评论函数来说明
1. 先看看WP官方的默认 mytheme_comment 回调函数
function mytheme_comment($comment, $args, $depth){ $GLOBALS['comment'] = $comment; ?> <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>"> <div id="comment-<?php comment_ID(); ?>"> <div class="comment-author vcard"> <?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?> <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?> </div> <?php if ($comment->comment_approved == '0') : ?> <em><?php _e('Your comment is awaiting moderation.') ?></em> <br /> <?php endif; ?> <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','') ?></div> <?php comment_text() ?> <div class="reply"> <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?> </div> </div> <?php }
2. 那么现在开始添加楼层计数参数 $commentcount 等代码,具体看代码中的注释
(2010.10.28 Update:优化了查询数)
function mytheme_comment($comment, $args, $depth){ $GLOBALS['comment'] = $comment; //主评论计数器初始化 begin - by zwwooooo global $commentcount; if(!$commentcount) { //初始化楼层计数器 $page = get_query_var('cpage')-1; $cpp=get_option('comments_per_page');//获取每页评论数 $commentcount = $cpp * $page; } //主评论计数器初始化 end - by zwwooooo ?> <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>"> <div id="comment-<?php comment_ID(); ?>"> <div class="comment-author vcard"> <?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?> <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?> </div> <?php if ($comment->comment_approved == '0') : ?> <em><?php _e('Your comment is awaiting moderation.') ?></em> <br /> <?php endif; ?> <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','') ?></div> <?php comment_text() ?> <div class="reply"> <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?> </div> <div class="floor"><!-- 主评论楼层号 by zwwooooo --> <?php if(!$parent_id = $comment->comment_parent) {printf('#%1$s', ++$commentcount);} ?><!-- 当前页每个主评论自动+1 --> </div> </div> <?php }
3. 从上面代码可以看出我给楼层号特意加上一个 div 来显示,如果你的主题评论结构够标准,那么可以参考下面的 css
ol.commentlist li div.floor{position:absolute;top:0;right:0;}
OK,搞定,有兴趣的朋友玩玩吧,这个唯一不好的就是会增加数据库查询次数,不过这应该是微不足道。
zww
赏
oooo
or
- 本文标题:只在WP主评论加上楼层号的方法(支持评论分页)
- 本文链接:https://zww.me/archives/25161
- 发布时间:2010年05月25日 14:55
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
我用你的代码成功为我的博客添加了楼层显示,谢谢!
@atatstone
慢慢折腾
哦呵呵,支持个,这个功能准备明天就折腾。。又多了个事做了!
请问Z大:我的主题好像没有调用$commentcount函数,那我应该怎么做?
@折子戏
这个谁说是函数了?这是我加的一个变量而已。
@zwwooooo
恩,这个是几天前得评论了,百度一下我就明白了,解决掉了。
看不懂
博主新年好啊! 昨天折腾了下,发现如果我10条评论每页,每个页面的评论就是从10楼开始的,好奇怪,主题是 suffusion,算是比较常见的,纠结中啊。。。
哦,没错,是我折腾的时候把$page 忘记减1了,
@kitsusia
这些已经通过多人验证的了,自己没错的话一般木有问题
我用WP-PageNavi,不过好像只能给文章分页,没法给评论分页。问下楼主,你的这个评论分页用的什么插件啊?
@kitsusia
评论分页WP原生支持。
[...] //主评论计数器初始化 begin - by zwwooooo http://zww.me/archives/25161 [...]
試試ajax評論提交後的效果,我的新評論總是1樓
为什么我是从#49开始的,不是#-1开始!
@airoschou
检查一下吧,注意要开启嵌套,而且这篇文章所说的方法是评论以顺序排序
[...] 转载自 只在WP主评论加上楼层号的方法(支持评论分页) [...]
[...] 代码来自于ZWW [...]
请问博主,要是没有 mytheme_comment 函数该怎么办
@Goy2免费VPN
自己写进去
你的评论框错位啦
@一品香茗
请问怎样错位法呢?
这个方法很不错。效果也不错。俺借鉴了。谢谢大神
@萝卜居
慢慢折腾,互相学习
博主,为什么我按照你的方法加进去之后楼层全部显示1#呢?
@小雨
没折腾好吧,仔细检查下。
怎么添加,在哪里添加?
@鬼娃娃
不知道啊,文章里写的看不懂我也不知道啊
[...] 鬼娃娃到处搜刮折腾教程,搜到Z大的只在WP主评论加上楼层号的方法(支持评论分页),然后自己折腾不明白了,我点开一看,哇靠,10年的,虽然有点老了,但是原理什么的都是可用的,咱简单的修改修改,个性化一下,嗯,还是不错的,这个仅针对Newer主题撒,其他主题后果自负。 [...]
zww,请教下,我以前楼层号显示都正常,但上次用了一款插件优化了下数据库,导致部分文章的楼层号全部变成0楼了,这个能不能手动在数据库中修复呢
@哼哼猪
这篇文章的方法不是写数据库的,但是需要获取主评论条数,不知道你的插件怎么优化的,呵呵。
@哼哼猪
突然想到:你检查一下你有没有设置“评论分页”,这段代码需要设置“评论分页”
@zwwooooo
看到了,确实是评论分页的问题,奇怪不分页的话貌似有一个限制,超过了就显示0了。
不过分页以后就有重复收录“comment-page-”的问题了
@哼哼猪
不分需要改改代码,你这样改:
把
直接写死为
@zwwooooo
多谢,为了减缓数据库查询,我决定也启用分页了,话说你的也收录大量comment-page-页面了。
我已在首页做了你的连接,以后常来向你学习,方便的话在links内页给我做个链接吧,刚好4*8=32,嘿嘿
哼哼猪博客:http://www.henghengzhu.com/
@哼哼猪
不太注重神马SEO,页面链接已加好。
很强大O(∩_∩)O~
不过现在我有一个问题啊,就是我的评论是直接用一个方法调用然后出来的列表,不知道能不能使用呢!?
@正仔
自己折腾看看吧,如果是用get_comments函数是可以的,不过需要配合。