如何为WordPress主题增加楼号显示功能
楼号显示,即根据评论发表的时间先后顺序显示该评论在评论列表中占据的楼号,第一条评论为1楼,第二条为2楼,以此类推。
在原本不支持嵌套评论的WP 2.6.5以前,为评论加上楼号是件很简单的事。因为最新的评论总是在最下,需要做的只是在显示评论的循环中输出一个依次累加的数即可。但在2.7的嵌套评论模式下,由于最新的评论可能是被嵌套在其他评论中的一条子回复,因此在最下(上)的评论未必是最新。换句话说,像以前那样给最下(上)的评论赋予最新的楼号就不再正确了。因此,要能够在嵌套评论中也显示正确的楼号,需要多少绕一点弯路。
第一步:在评论中增加楼号显示,也就是在评论栏里添加新的东西,牵涉到WordPress的评论结构修改,方法详见我的另一篇文章:如何自定义WordPress2.7的评论内部结构,这里不再赘述。
第二步:WordPress的评论在数据库中是根据发布时间先后统一标号的,所有的评论都放在一起,假设某条评论的标号为256,能够知道的仅仅是该评论为总第256条评论,没有其他任何信息指明该评论是在日志中的几楼。这个几楼,也就是楼号,是需要由我们来决定的。决定好楼号之后,将楼号按评论标号一一对应存储,然后就能够在显示评论的时候显示楼号了。
那么如何决定楼号呢?先看个简单的例子,假设某篇日志中的评论分别是201号、207号、311号,其中311号评论是对201号评论的回复。
在这个例子中,尽管311是最新评论,但由于嵌套规则的影响,实际显示顺序是 201-311-207(从上到下)。但有一点,我们知道,所有的评论都是从数据库中读取出来然后再显示到网页上的,把这个过程分为两个步骤,也就是提取-显示来看的话,我们发现,尽管评论显示的顺序被嵌套规则重定义了,但WordPress在从数据库提取评论的时候仍然是按标号顺序来的。也就是说例子中的评论是以201-207-311这样的先后顺序从数据库中被读取出来的。太好了!这正是我们需要的顺序,我们可以按这个顺序决定楼号了。
决定策略:当提取评论的时候决定并存储楼号,在显示评论的同时显示楼号。
示例代码1——在提取评论时决定并存储楼号:
在comments.php中找到<?php if ( have_comments() ) : ?>或是<?php if ( $comments ) : ?>,在其后加上
<?php global $comment_ids; $comment_ids = array();
foreach ( $comments as $comment ) {
if (get_comment_type() == "comment") {
$comment_ids[get_comment_id()] = ++$comment_i;}
} ?>
示例代码2——在显示评论的同时显示楼号:
//注意此处应当是在自定义的评论显示函数中
global $comment_ids;
$comment_floor = $comment_ids[get_comment_id()];
echo $comment_floor.'楼';
好了,只要你有那么一点儿php基础,我想看完这篇文章,你也会给主题加上楼号显示功能了。
注:可以看到我的博客隐藏了子评论的楼号显示,虽然本文没有提及这个功能的实现,不过实现这个附加功能并不是一件难事,相信掌握了本文内容的朋友都能够做到。

20 Responses
Leave a Reply新主题中,我会试试这个东西……
TEST二楼……
嵌套能显示我6楼不?
是不是先要把第一步文章中的代码加到functions里面去,然后再修改评论模板呢?这篇文章中的代码2放到什么位置?
对,自定义的评论显示函数是写在functions里面的
闪过,,,,
情人节快乐
很想在我的主题中加入评论楼层显示,但是搞不定啊
看来不行。。。。
当然可以,由于反映比较混乱,所以默认关闭了。在Win7blog的主题选项中可以选择打开。
游客测试嵌套楼层
很不错的,学习采用之!
这个需要
怎么按正常顺序编号呢?即使有镶套的情况下,镶套内的回复也要编号~
WordPress是个好东西
学习了,我去试试.
2.7以后需要重新定义 评论样式才行么?
如果我是那种wp_list_comments 在这支前加行么?
请教一下博主是怎么隐藏了子评论的楼号显示呢 万分感谢
我这个主题真够崩溃的,许多东西都没用,导致加不了代码。
anmgesrxjxpk