20160125注:回头看了下,当年的代码其实也不怎样,还可以改进。目前没精力改,所以下面的代码仅供参考。

网络上不少错误代码,抄来抄去。

desc是倒序,asc是顺序。有的代码,把这两个都搞混。另外,无论是哪种顺序,都得先检查分页显示评论是否开启,即$page是否为null。有的代码没有这个步骤,在某些特定情况下就会出现楼层错误的现象。比方说,每页评论显示数量为5,当前评论总量为10,没开启分页显示评论,此时ceil($cnt/$cpp)等于2,所以最后$commentcount就为6了,而不是正确的11。

$GLOBALS['comment'] = $comment;

在主题的functions文件里,找到以上代码,在其下面添加以下代码。

global $commentcount, $wpdb, $post;
if(!$commentcount) {
	if(get_option('comment_order') == 'desc') {//倒序
		$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent");
		$cnt = count($comments);//获取主评论总数量
		$page = get_query_var('cpage');//获取当前评论列表页码
		$cpp = get_option('comments_per_page');//获取每页评论显示数量
		if($page == null) {
			$commentcount = $cnt + 1;//没有开启分页显示评论
		}elseif(ceil($cnt/$cpp) == 1 || ($page > 1 && $page == ceil($cnt/$cpp))) {
			$commentcount = $cnt + 1;//开启分页,只有一页或者当前是最后一页
		}else {
			$commentcount = $cpp * $page + 1;//开启分页,在某一页
		}
	}else{//顺序
		$page = get_query_var('cpage');
		$cpp = get_option('comments_per_page');
		if($page == null) {
			$commentcount = 0;
		}else{
			$commentcount = $cpp * ($page - 1);
		}
	}
}
if(!$parent_id = $comment->comment_parent) {//跳过子评论
	if(get_option('comment_order') == 'desc') {
		$commentcountText = --$commentcount . '#';
	}else{
		$commentcountText = ++$commentcount . '#';
	}
}

最后,在需要输出楼层号的地方添加以下代码即可。

<?php echo $commentcountText;?>