倒序显示主评论楼层号(支持评论分页)

最新代码移步到这里:只在WP主评论加上楼层号的方法『支持顺序、倒序』(2012.11.17)

我写了这篇《只在WP主评论加上楼层号的方法(支持评论分页)》后,很多朋友就问我“怎样实现倒序的主评论楼层号”,那时我折腾了一下,一直找不到只统计主评论(嵌套第一层)数量的函数(以前有总评论数的函数,但不适合),所以一直没实现。

昨晚(2010.8.2)37度高温让我很难入眠,想了一下,既然没有直接的函数,那么就只能直接用SQL过滤并统计出主评论数量,今天我在本地测试一翻,ok,搞定,唯一的缺点就是增加了数据库查询,没办法,谁叫WP自身没有此函数呢?

下面是方法,喜欢倒序显示评论的朋友可以折腾一下。

一、前提

1. 主题必须支持嵌套

2.设置WP嵌套评论排序为“由新到旧”

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. 修改后的回调函数,具体看注释

function mytheme_comment($comment, $args, $depth){
 $GLOBALS['comment'] = $comment;

 /* 主评论计数器 by zwwooooo */
     global $commentcount,$wpdb, $post;
     if(!$commentcount) { //初始化楼层计数器
          $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent");
          $cnt = count($comments);//获取主评论总数量
          $page = get_query_var('cpage');//获取当前评论列表页码
          $cpp=get_option('comments_per_page');//获取每页评论显示数量
         if (ceil($cnt / $cpp) == 1 || ($page > 1 && $page  == ceil($cnt / $cpp))) {
             $commentcount = $cnt + 1;//如果评论只有1页或者是最后一页,初始值为主评论总数
         } else {
             $commentcount = $cpp * $page + 1;
         }
     }
 /* 主评论计数器 end */

 ?>
 <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. 显示楼层号的 .floor 参考下面的 css

ol.commentlist li div.floor{position:absolute;top:0;right:0;}

搞定收工。

zww
or
oooo

“倒序显示主评论楼层号(支持评论分页)”有109条评论

  1. hzlzh says:

    记得我之前的那个theme 就有这功能哟

    1. zwwooooo says:

      @hzlzh mg12的?好像是,但不支持原生嵌套

  2. mice says:

    :grin: 给需要的人用吧 =.= 看完评论了...
    膜拜19楼的大哥 哈哈..Z叔叔郁闷不..

    1. zwwooooo says:

      @mice 其实我没表达清楚,我的意思是说有函数就不用这么折腾了 :arrow:

  3. merror says:

    嗯...你又折腾了~

    1. zwwooooo says:

      @merror 喜欢就折腾

    2. 豆大师 says:

      太爱你了,正是看了你的第一篇文章后好郁闷如何倒叙,结果你还真解决了。

    3. zwwooooo says:

      @豆大师
      解决即可,慢慢折腾

  4. 又可以学一招了

  5. zzzhu says:

    个人感觉倒序 正序无所谓

    1. zwwooooo says:

      @zzzhu 需要的人自然就有用

      1. marcus says:

        非常疑惑,如何实现ajax comments的,插件与Jinwen的all.js似乎有冲突,而你这边很好的综合了两个评论的优势!!

  6. Lazyyyyyy says:

    改了以后,对哪个是沙发就一目了然啦~
    对按新到旧排序评论的设置很有用

    1. zwwooooo says:

      @Lazyyyyyy 对,不过我个人喜欢旧到新

  7. Kars says:

    增加了数据库查询 , 这一点 蛮讨厌的、、

    1. zwwooooo says:

      @Kars 没查询何来数据?哈哈

    2. Kars says:

      @zwwooooo 说得也对~ 哈哈~~

  8. 测试一下。

  9. 什么叫倒序显示主评论楼层号呢?我还以为是最后一个评论变成沙发呢。原来不是这么回事啊。

    1. zwwooooo says:

      @猪八戒的博客 就是你说的,简单来说按新到旧排序就叫倒序

  10. Bee君 says:

    这应该查询次数会增加...有点蛋疼.....

    1. zwwooooo says:

      @Bee君 要用的自己斟酌了,哈

  11. Solo says:

    博主真能折腾,值得学习...

    1. zwwooooo says:

      @Solo 折腾才有劲头

  12. 真牛,可以搞WP培训了

    1. zwwooooo says:

      @绿色丰胸 没到可以丰胸的时候

  13. 闫头 says:

    恩,谢谢博主,多多折腾!

    1. zwwooooo says:

      @闫头 折腾快乐

  14. 小邪 says:

    对了,分页的时候是设置的分页评论数 ~
    是只算主评论数量的 ~
    还是连子评论一起算的 ~
    如果只算主评论的话,可能wp里面有类似函数 ~
    无聊就可以去翻一翻了 ~

    1. zwwooooo says:

      @小邪 wp后台设置的评论数是按主评论算的

  15. 楼主太专业,看不懂这么复杂代码的飘过。

  16. 真好 says:

    有意思。。。想法还是不错的。

    1. zwwooooo says:

      @真好 总是有人需要

  17. [...] http://zww.me/archives/25230 倒序显示主评论楼层号(支持评论分页) # [...]

  18. 中国女人一半以上到时候了

  19. 万戈 says:

    正好在搞T楼,需要去加一下

    1. winy says:

      @万戈 现在才来加,太晚啦 :shock:

    2. zwwooooo says:

      @万戈 终于需要了?

  20. 山头人 says:

    不搞了.折腾也很累人.

    1. zwwooooo says:

      @山头人 喜欢就折腾,不喜欢就偷懒