只在WP主评论加上楼层号的方法(支持评论分页)
很久没折腾 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 等代码,具体看代码中的注释
function mytheme_comment($comment, $args, $depth){ $GLOBALS['comment'] = $comment; //主评论计数器初始化 begin - by zwwooooo global $commentcount; $page = ( !empty($in_comment_loop) ) ? get_query_var('cpage') : get_page_of_comment( $comment->comment_ID, $args );//zww $cpp=get_option('comments_per_page');//获取每页评论显示数量 if(!$commentcount) { //初始化楼层计数器 if ($page > 1) { $commentcount = $cpp * ($page - 1); } else { $commentcount = 0;//如果评论还没有分页,初始值为0 } } //主评论计数器初始化 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,搞定,有兴趣的朋友玩玩吧,这个唯一不好的就是会增加数据库查询次数,不过这应该是微不足道。
声明: 本文采用 BY-NC-SA 协议进行授权 | ZWWoOoOo
转载请注明转自《只在WP主评论加上楼层号的方法(支持评论分页)》



对了~ 请问,这个评论是如何不检查重复评论呢?
@集趣 不要内容相同即可,这是wp内置功能
@zwwooooo 可是我并没有出现相同的啊~
@集趣 是你评论太快了吧
@zwwooooo 还有个问题,发布的评论,能够显示,但也出现了重复评论的错误提示。
我在同一日志发表2个评论会出现
我用的是WordPress jQuery-Ajax-Comments v1.29 by Willin Kan.这个版本
@集趣 一样的版本,这个有时间限制,不能评论太快。
@zwwooooo 我在你这里测试一下看?
@zwwooooo 刚刚试过~ 你出现评论重复的提示以后,评论不会出现,我的居然会出现
@集趣 要么是你的主题问题要么是你的RPWT
@zwwooooo 我很郁闷哦,
不知道什么问题。有的时候还会突然发表2个同样的评论。
请问博主你的reply那个是直接调用的函数么?需要插件不?直接用上面给出的那段代码能够实现么?
@Forsaken reply?你没说清楚,你是说点击reply出现@xxx的功能么?如果是那是用jQ实现的,我写过文章,自个搜
@zwwooooo 找到了
不过貌似实现不了你这里的G型评论额,后台开启嵌套2层之后第二层不给回复了
@Forsaken 哦,你说的是限制在第二层无限回复功能啊,我的是用jQ实现的,具体方法 Jinwen 那里有思路
@zwwooooo 嗯,是啊~谢了!我去找找看
效果不错,不过我那里大部分都是去留言走掉,少部分人会再次探讨,不加也罢
@帅哥 嘻嘻,这是为了好看而已
那我就友情支持一下吧,我是zblog用户
@卢松松 哈,我刚好相反,不懂zBlog
又来了么呵呵呵,更新速度不错~~
@团伙分享创意 已经文囧了
现在变讨论组啦~我这厢的小博客~暂时还没到这个境界
@Bee君 真不知道叫什么名字好,叫楼层又不太对
我也用上啦~~~不错~~
@林木木 玩儿,哈
不错,能不能加个锚?
@hzlzh 可以,自己加
@xianzi 荒淫使用
感觉有点太复杂了
@dengm 觉得复杂就直接照着修改用
我的博客也已经按照你说的折腾好了,不过最后的CSS好像不起作用。。加上后,会不显示楼层的。。
@andy 最后的css只能参考,自己根据自己的主题修改。
@zwwooooo 我想把reply移动评论下面来,但是我那主题的reply主评论副评论样式是一样的,我看到你副评论有个atclass样式,问下你评论代码里的判断怎么写,如果是主评论就用reply样式如果是副评论就用atclass样式,谢谢
@洁 你如果研究过评论的结构你就知道怎样去定义主评论和子评论的样式了,atclass是给jQ用的,不是用来定义样式的。
评论结构: http://zww.me/archives/25155
zoo 怎样才能倒序数楼层啊……
@似飘若舞 我试过比较难,暂时放弃,看哪天再研究下
这个好
@无念 荒淫折腾加上
分页这个就有点困难了
呵呵
但是那个楼层显示的应该比较容易
@浩子 一起解决了