只在WP主评论加上楼层号的方法(支持评论分页)

最新代码移步到这里:只在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,搞定,有兴趣的朋友玩玩吧,这个唯一不好的就是会增加数据库查询次数,不过这应该是微不足道。

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: http://zww.me/archives/25161

231 comments

  1. iamlukas iamlukas Firefox 3.6.3 Windows XP

    确实是好办法。

    沙发
  2. Jinwen Jinwen Firefox 3.6.3 Windows Vista

    是好办法。我原来也想加上,但后来觉得这个层数显示好像已经不太有其用处的样子,也就懒下来了。

    板凳
  3. 阿邙 阿邙 Internet Explorer 8.0 (Compatibility Mode) Windows 7

    没有找到此函数在哪.. :oops: 00

    地板
  4. ......
  5. WordPress主评论中加上楼层号 | lss53 - pingback on 2012/03/27/ 17:28
    92楼
  6. Goy2免费VPN Goy2免费VPN TheWorld Browser Windows 7

    请问博主,要是没有 mytheme_comment 函数该怎么办

    93楼
  7. 一品香茗 一品香茗 Google Chrome 20.0.1132.47 Windows 7

    你的评论框错位啦

    94楼
  8. 萝卜居 萝卜居 Google Chrome 19.0.1084.52 Windows XP

    这个方法很不错。效果也不错。俺借鉴了。谢谢大神

    95楼
  9. 小雨 小雨 Firefox 14.0.1 Windows XP

    博主,为什么我按照你的方法加进去之后楼层全部显示1#呢?

    96楼
  10. 鬼娃娃 鬼娃娃 Google Chrome 20.0.1115.1 Windows 7 x64 Edition

    怎么添加,在哪里添加?

    97楼
  11. Newer主题折腾之评论楼层号 | 大发贱志 - pingback on 2012/10/11/ 22:23
    98楼
  12. 哼哼猪 哼哼猪 Google Chrome 22.0.1229.94 Windows 7 x64 Edition

    zww,请教下,我以前楼层号显示都正常,但上次用了一款插件优化了下数据库,导致部分文章的楼层号全部变成0楼了,这个能不能手动在数据库中修复呢

    99楼
    • zwwooooo zwwooooo Firefox 16.0 Windows 7 x64 Edition

      @哼哼猪
      这篇文章的方法不是写数据库的,但是需要获取主评论条数,不知道你的插件怎么优化的,呵呵。

    • zwwooooo zwwooooo Firefox 16.0 Windows 7 x64 Edition

      @哼哼猪
      突然想到:你检查一下你有没有设置“评论分页”,这段代码需要设置“评论分页”

    • 哼哼猪 哼哼猪 Google Chrome 22.0.1229.94 Windows 7 x64 Edition

      @zwwooooo
      看到了,确实是评论分页的问题,奇怪不分页的话貌似有一个限制,超过了就显示0了。
      不过分页以后就有重复收录“comment-page-”的问题了

    • zwwooooo zwwooooo Firefox 16.0 Windows 7 x64 Edition

      @哼哼猪
      不分需要改改代码,你这样改:

      $commentcount = $cpp * $page;

      直接写死为

      $commentcount = 0;
    • 哼哼猪 哼哼猪 Google Chrome 22.0.1229.94 Windows 7 x64 Edition

      @zwwooooo
      多谢,为了减缓数据库查询,我决定也启用分页了,话说你的也收录大量comment-page-页面了。
      我已在首页做了你的连接,以后常来向你学习,方便的话在links内页给我做个链接吧,刚好4*8=32,嘿嘿
      哼哼猪博客:http://www.henghengzhu.com/

    • zwwooooo zwwooooo Firefox 16.0 Windows 8 x64 Edition

      @哼哼猪
      不太注重神马SEO,页面链接已加好。

  13. 正仔 正仔 Firefox 19.0 Windows 7

    很强大O(∩_∩)O~
    不过现在我有一个问题啊,就是我的评论是直接用一个方法调用然后出来的列表,不知道能不能使用呢!?

    100楼
    • zwwooooo zwwooooo Firefox 19.0 Windows 7 x64 Edition

      @正仔
      自己折腾看看吧,如果是用get_comments函数是可以的,不过需要配合。

  14. 子寒互动视觉 子寒互动视觉 Opera 12.14 Windows XP

    :arrow: 看来博主使用了许多的js代码,但有些代码并不能完全的与浏览器兼容:在ie8浏览器下,你的站点会使浏览器无响应,页面会死掉,无法浏览;而在opera下浏览速度有所拖慢,在FF下,网页响应速度会特别慢。希望博主能调整一下代码,去冗存精,方便更多人更舒心的看到博主的大文。

    101楼
    • zwwooooo zwwooooo Firefox 19.0 Windows 7 x64 Edition

      @子寒互动视觉
      我的测试结果都很ok,请先排除网速问题,服务器对联通不给力,而且……我的朋友测试都基本ok啦。我用的就是FF,速度很快。

    • 子寒互动视觉 子寒互动视觉 Firefox 19.0 Windows XP

      @zwwooooo
      好吧!你的服务器可能是对联通支持不够,那在ie8下容易造成浏览器崩溃死掉,这个在公司和家里都会这样的,而在其他浏览器下正常的。 :?:

    • zwwooooo zwwooooo Firefox 19.0 Windows 7 x64 Edition

      @子寒互动视觉
      不好意思,IE8我只在IETester里面测试过,速度不错,况且来我这的朋友很少用IE,IE本身的速度就有问题,而且我好像不鸟IE8及其以下版本的……你看提示就知道了。至于你说主题问题,我这主题都上线很久了,能在4秒ctrl+f5完全打开一个网站我不觉得慢,如果你要秒杀是不可能的,我的服务器在美国。

  15. Louis Han Louis Han Firefox 28.0 Windows 7 x64 Edition

    貌似是失效了?

    102楼

Leave a Reply