You are here: Home » All Categories » WordPress » WP Trick » 只在WP主评论加上楼层号的方法(支持评论分页)

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

May 25th, 2010 14:55 | Leave a comment?(201) Go to comments

很久没折腾 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

Filed under

WP Trick

| Tags:

,

Related Posts

Most Popular

201 Comments.

⊕Leave a comment?
  1. 砼砼 砼砼 Firefox 3.6.3Windows 7

    多页评论呢?

    21楼
  2. Firm Firm Google Chrome 4.1.249.1064Windows XP

    这个想法不错,看上去比较有次序

    22楼
  3. Dianso Dianso Google Chrome 5.0.375.55Windows 7

    嵌套回复不计算在内吧

    23楼
  4. 苏扬 苏扬 Firefox 3.6.3Windows 7

    这样挺好的,评论数更真实!

    24楼
    • zwwooooo zwwooooo Firefox 3.6.3Windows 7

      @苏扬 其实不真实,这个只统计主评论,但如果只有博主回复的话倒是比较准确

  5. 于泽鹏 于泽鹏 Google Chrome 4.1.249.1064Windows Vista

    我特此来学习的!呵呵!

    25楼
  6. 球犯 球犯 Opera Mini 4.2.15410J2ME/MIDP Device

    呃,对代码一窍不通的人路过。。
    对你们折腾代码的人,我可真是佩服阿

    26楼
  7. 混生 混生 Maxthon 2.0Windows XP

    这样更能明显的显示楼层,挺好

    27楼
  8. pazz7ven pazz7ven Google Chrome 4.1.249.1064Windows XP

    现在发现折腾其实乐趣无穷啊 呵呵

    28楼
  9. BB霜 BB霜 Tencent Traveler 4.0Windows XP

    以前就被这个搞死了,一直不成功

    29楼
  10. Jutoy Jutoy Google Chrome 6.0.408.1Windows 7

    这个还是很实用的,有时间我也搞搞

    30楼
  11. 集趣 集趣 Google Chrome 5.0.360.4Windows XP

    对了~ 请问,这个评论是如何不检查重复评论呢?

    31楼
  12. 集趣 集趣 Google Chrome 5.0.360.4Windows XP

    我在同一日志发表2个评论会出现

    32楼
  13. 集趣 集趣 Google Chrome 5.0.360.4Windows XP

    我用的是WordPress jQuery-Ajax-Comments v1.29 by Willin Kan.这个版本

    33楼
  14. Forsaken Forsaken Firefox 3.6.3Windows 7

    请问博主你的reply那个是直接调用的函数么?需要插件不?直接用上面给出的那段代码能够实现么? :smile:

    34楼
    • zwwooooo zwwooooo Firefox 3.6.3Windows 7

      @Forsaken reply?你没说清楚,你是说点击reply出现@xxx的功能么?如果是那是用jQ实现的,我写过文章,自个搜

    • Forsaken Forsaken Firefox 3.6.3Windows 7

      @zwwooooo 找到了 :grin: 不过貌似实现不了你这里的G型评论额,后台开启嵌套2层之后第二层不给回复了 :!:

    • zwwooooo zwwooooo Firefox 3.6.3Windows 7

      @Forsaken 哦,你说的是限制在第二层无限回复功能啊,我的是用jQ实现的,具体方法 Jinwen 那里有思路

    • Forsaken Forsaken Firefox 3.6.3Windows 7

      @zwwooooo 嗯,是啊~谢了!我去找找看

  15. 帅哥 帅哥 Google Chrome 5.0.375.55GNU/Linux

    效果不错,不过我那里大部分都是去留言走掉,少部分人会再次探讨,不加也罢

    35楼
  16. 卢松松 卢松松 Firefox 3.6.4Windows Server 2003

    那我就友情支持一下吧,我是zblog用户

    36楼
  17. 团伙分享创意 团伙分享创意 Internet Explorer 7.0Windows XP

    又来了么呵呵呵,更新速度不错~~

    37楼
  18. Bee君 Bee君 Google Chrome 6.0.408.1Windows XP

    现在变讨论组啦~我这厢的小博客~暂时还没到这个境界

    38楼
  19. 林木木 林木木 Google Chrome 5.0.375.70Windows 7

    我也用上啦~~~不错~~

    39楼
  20. hzlzh hzlzh Firefox 3.6.3Windows 7

    不错,能不能加个锚?

    40楼

Leave a Reply