只在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. iamlukas says:

    确实是好办法。

    1. 疾风 says:

      @iamlukas 坐大腿!

  2. Jinwen says:

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

    1. zwwooooo says:

      @Jinwen 哈哈,以前的也是没啥用吧,就是用来看的 :mrgreen:

  3. 阿邙 says:

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

    1. zwwooooo says:

      @阿邙 主题的functions.php里面,如果你的主题有的话

  4. Forsaken says:

    我去折腾看看 :shock:

  5. 疾风 says:

    没有设 板凳和地板啊~·

    1. zwwooooo says:

      @疾风 不是此文章讨论点,况且那个有人折腾了

  6. ifenwen says:

    确实可以尝试一下 这样可以更清楚些自己的评论早或是晚

  7. 瓜瓜 says:

    前三层用不同颜色标识下,要好看些。。 :!:

    1. zwwooooo says:

      @瓜瓜 我只定义了沙发颜色

  8. jalena says:

    看不懂 :oops:

  9. :grin: 继续折腾··· :mrgreen:

  10. 猪八戒 says:

    这个真的很不错,我的主题不支持嵌套。

    1. zwwooooo says:

      @猪八戒 不用嵌套的方法更简单

  11. mcooo says:

    我个人不喜欢嵌套评论,就不折腾了。。。

    1. zwwooooo says:

      @mcooo 这是趋势

  12. mcooo says:

    不过就在内容上加个楼层号玩玩! :lol:

    1. zwwooooo says:

      @mcooo 本身就是用来玩的

  13. 万戈 says:

    在gg reader中加星标注,以后会用到

  14. cyl says:

    看上去似乎挺难的

    1. zwwooooo says:

      @cyl 不怎么难吧

  15. 看了一遍不太懂,收藏 起来慢慢看

    1. zwwooooo says:

      @最有效的祛斑产品 慢慢看吧,或者直接cp

  16. A.shun says:

    先收藏。。。我的评论样式太紧凑了没空间
    等以后有新的样式可以考虑

    1. zwwooooo says:

      @A.shun 貌似这个不占空间

  17. ithillad says:

    哈哈,赞啊,这个好玩,直接搬去用了。不过现在我的评论样式好像更难看了……要找个时间好好设计一下了 :arrow:

    1. zwwooooo says:

      @ithillad 用绝对位置应该很好修改

  18. Terry says:

    看了三遍,我承认我没看懂,直接复制粘贴了事 :evil:

    1. zwwooooo says:

      @Terry 我以前也是这样的 :mrgreen:

  19. hzlzh says:

    建议:应该吧 时间上的url 放到 讨论层上,这样方便引用楼层评论

    1. zwwooooo says:

      @hzlzh 但嵌套的不行啊

  20. 安天下 says:

    用了博主的theme,现在才知道原来是国产的。哈,特来道谢~

    1. 安天下 says:

      @zwwooooo 哇,好华丽的修辞... :mrgreen:

发表评论

昵称 *

网址

B em del U Link Code Quote