Home » WP Trick

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

衡天小张,四钻保证

很久没折腾 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 等代码,具体看代码中的注释

function mytheme_comment($comment, $args, $depth){
$GLOBALS['comment'] = $comment;

//主评论计数器初始化 begin - by zwwooooo
	global $commentcount;
	$page = ( !empty($in_comment_loop) ) ? get_query_var('cpage') : get_page_of_comment( $comment->comment_ID, $args );//zww
	$cpp=get_option('comments_per_page');//获取每页评论显示数量
	if(!$commentcount) { //初始化楼层计数器
		if ($page > 1) {
		$commentcount = $cpp * ($page - 1);
		} else {
		$commentcount = 0;//如果评论还没有分页,初始值为0
		}
	}
//主评论计数器初始化 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,搞定,有兴趣的朋友玩玩吧,这个唯一不好的就是会增加数据库查询次数,不过这应该是微不足道。

声明: 本文采用 BY-NC-SA 协议进行授权 | ZWWoOoOo
转载请注明转自《只在WP主评论加上楼层号的方法(支持评论分页)

Related Posts:

Most Popular

102 Comments.

⊕Leave a comment?
  1. 对了~ 请问,这个评论是如何不检查重复评论呢?

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

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

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

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

    #35
  6. 那我就友情支持一下吧,我是zblog用户

    #36
  7. 又来了么呵呵呵,更新速度不错~~

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

    #38
  9. 我也用上啦~~~不错~~

    #39
  10. 不错,能不能加个锚?

    #40
  11. :grin: 用上了,谢谢谢谢谢谢谢

    #41
  12. 感觉有点太复杂了

    #42
  13. 我的博客也已经按照你说的折腾好了,不过最后的CSS好像不起作用。。加上后,会不显示楼层的。。
    :razz:

    #43
  14. @zwwooooo 我想把reply移动评论下面来,但是我那主题的reply主评论副评论样式是一样的,我看到你副评论有个atclass样式,问下你评论代码里的判断怎么写,如果是主评论就用reply样式如果是副评论就用atclass样式,谢谢

    #44
  15. zoo 怎样才能倒序数楼层啊……

    #45
  16. 分页这个就有点困难了
    呵呵
    但是那个楼层显示的应该比较容易

    #47

Leave a Reply

B em del U Link Code Quote


Trackbacks and Pingbacks:

Go to comments