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

zww
or
oooo

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

  1. 砼砼 says:

    多页评论呢?

    1. zwwooooo says:

      @砼砼 不是说了支持评论分页么 :evil:

  2. Firm says:

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

    1. zwwooooo says:

      @Firm 一直想加,但一直忘记+没劲

  3. Dianso says:

    嵌套回复不计算在内吧

    1. zwwooooo says:

      @Dianso 嵌套算在内就简单了

  4. 苏扬 says:

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

    1. zwwooooo says:

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

  5. 于泽鹏 says:

    我特此来学习的!呵呵!

  6. 球犯 says:

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

    1. zwwooooo says:

      @球犯 我也是闲时玩的业余者

  7. 混生 says:

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

    1. zwwooooo says:

      @混生 就是这个目的 :mrgreen:

  8. pazz7ven says:

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

    1. zwwooooo says:

      @pazz7ven 折腾嘛,就是自爽 :grin:

  9. BB霜 says:

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

  10. Jutoy says:

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

    1. zwwooooo says:

      @Jutoy 玩玩很有趣,呵呵

  11. 集趣 says:

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

    1. zwwooooo says:

      @集趣 不要内容相同即可,这是wp内置功能

    2. 集趣 says:

      @zwwooooo 可是我并没有出现相同的啊~

    3. zwwooooo says:

      @集趣 是你评论太快了吧

    4. 集趣 says:

      @zwwooooo 还有个问题,发布的评论,能够显示,但也出现了重复评论的错误提示。

    5. dh says:

      @集趣
      我试一下 看看到底有多深 呵呵~~~~~~

  12. 集趣 says:

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

  13. 集趣 says:

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

    1. zwwooooo says:

      @集趣 一样的版本,这个有时间限制,不能评论太快。

    2. 集趣 says:

      @zwwooooo 我在你这里测试一下看?

    3. 集趣 says:

      @zwwooooo  刚刚试过~ 你出现评论重复的提示以后,评论不会出现,我的居然会出现

    4. zwwooooo says:

      @集趣 要么是你的主题问题要么是你的RPWT :mrgreen:

    5. 集趣 says:

      @zwwooooo 我很郁闷哦,
      不知道什么问题。有的时候还会突然发表2个同样的评论。

  14. Forsaken says:

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

    1. zwwooooo says:

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

    2. Forsaken says:

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

    3. zwwooooo says:

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

    4. Forsaken says:

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

  15. 帅哥 says:

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

    1. zwwooooo says:

      @帅哥 嘻嘻,这是为了好看而已

  16. 卢松松 says:

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

    1. zwwooooo says:

      @卢松松 哈,我刚好相反,不懂zBlog

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

  18. Bee君 says:

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

    1. zwwooooo says:

      @Bee君 真不知道叫什么名字好,叫楼层又不太对

  19. 林木木 says:

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

  20. hzlzh says:

    不错,能不能加个锚?

    1. zwwooooo says:

      @hzlzh 可以,自己加

发表评论

昵称 *

网址

B em del U Link Code Quote