2010年08月06日 109条评论

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

最新代码移步到这里:只在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. 陈剑 says:

    这个我需要,看我能懂不,让那些最新评论在顶上
    我也更新了,有空过去看看给点意见哦

  2. winy says:

    +1变-1了,多了几次查询

    1. zwwooooo says:

      @winy 没办法

  3. 秦大少 says:

    感觉太复杂了,不知道我折腾的来不!

    1. zwwooooo says:

      @秦大少 不是很复杂

  4. BoKeam says:

    37度高烧还弄 :arrow:

  5. FORECE says:

    哦,我都忘记了自己的评论是正序倒叙了,没太注意这些。。

    1. zwwooooo says:

      @FORECE 这……晕着玩博客么?

  6. 球犯 says:

    呵呵 这篇确实不错哈~我发现右边那个滚动的有了变化哦 新折腾出来的把~ :grin:

    1. zwwooooo says:

      @球犯 没,换了个样式而已

    2. 球犯 says:

      @zwwooooo 哦 还不错呢~我上面那条留言又是留错邮箱了吧 难怪没收到邮件呢 :oops:

    3. zwwooooo says:

      @球犯 囧~你清空浏览器了?

  7. 阿修 says:

    如果不显示楼层的话就简单多了。
    支持z大折腾~~

    1. zwwooooo says:

      @阿修 当然啦,不写博更简单 :mrgreen:

  8. 就算wordpress自身有这样的函数,莫非就不增加跟数据的交互了?一样的,反正都要查询,不过wordpress自带的话,链接的次数可能少点。

    1. zwwooooo says:

      @世纪之光 自带的话起码比我写的代码比较优化吧 :evil:

  9. 我的评论次序总是乱七八糟,好好学习

    1. zwwooooo says:

      @软件盒子 怎么会乱七八糟呢?不是顺序就是倒序,要是你的是乱七八糟才厉害

  10. says:

    能搞到沙发上去吗

    1. zwwooooo says:

      @洁 可以,就是又要增加查询度

  11. 木本无心 says:

    恩,木木觉得应该让最新的评论显示在最前面,个人建议,仅供参考。

    1. zwwooooo says:

      @木本无心 我比较喜欢旧的评论在前面

  12. ZYW says:

    这就可以让最新的评论显示在最上面了,
    不过可能叫爱抢沙发的朋友不爽 :mrgreen:

    1. zwwooooo says:

      @ZYW 对,但可以加个沙发主高高在上的功能

  13. ifenwen says:

    等有机会先把楼层的问题搞定

    1. zwwooooo says:

      @ifenwen 楼层不是有几种方法了么?

  14. A.shun says:

    倒序什么的最讨厌了 :grin:

    1. zwwooooo says:

      @A.shun 哈哈,我也不喜欢倒序,不过有人要

  15. Leyond says:

    我就不折腾了,怕弄坏了心情

    1. zwwooooo says:

      @Leyond 没有折腾心就好好写文章好了

  16. [...] This post was mentioned on Twitter by Max Lee, zwwooooo. zwwooooo said: 倒序显示主评论楼层号(支持评论分页) http://goo.gl/fb/t8j4K [...]

  17. erick says:

    折腾吧,不折腾蛋疼!

    1. zwwooooo says:

      @erick 的确如此

  18. Ygs says:

    我没有显示楼层,谢谢

    1. zwwooooo says:

      @Ygs 没有显示也不用感谢我

  19. Justice says:

    就算 WP 自带这个功能, 也是少不了数据库查询的吧.

    1. zwwooooo says:

      @Justice 但肯定比我的代码优化

  20. QiQiBoY says:

    额。。既然php端这么麻烦,那可以用js来做了。。

    1. zwwooooo says:

      @QiQiBoY 我不懂js啊 :arrow:

    2. Justice says:

      @QiQiBoY 有翻页就没法光用 JS 了

发表评论

昵称 *

网址

B em del U Link Code Quote