wordpress评论分为悬浮@回复和嵌套回复。前者显示楼层容易,一层一层累计下来就行,而后者则麻烦了些,因为如果也一层层按时间顺序累计,那么嵌套的子评论往往会打乱评论的楼层。所以大家普遍采用主评论楼层显示。我曾经也写了一篇关于主评论楼层显示的文章《wordpress指定页面评论数+支持分页的楼层显示》。
现在对这个主评论楼层进行了改进,支持了子评论楼层。
什么意思呢?
其实就是说每个评论的直接子评论(不包括孙子评论)当做一个楼层计数系统。
比如有一条评论A,有八条回复此评论的子评论(B1到B8),那么这八条评论就按照时间·顺序从1开始累计楼层。如果还有其它评论是对这八条评论的回复(即这八条评论的直接子评论,即A的孙子评论),那么他们也按照他们各自的父级评论从1开始排序。如下图所示:
正如图所示,具体的实例,大家可以到这个地址查看,请看仔细些:
多级无限楼层数展示
实现代码
其实实现思路还是原来那种主评论显示方法。主评论显示我们在wp的评论自定义显示调用函数中使用一个全局变量来存储楼层数(分页楼层的计算我这里就不说了,我以前的那篇文章里讲有,很多博友也写过)。
我这里的多级楼层其实也还是使用一个全局变量,只不过这个变量的类型变了,不是一个整型,而是一个数组。同样的我们要在函数里开头部分先声明引入全局变量$comemntcount:
然后是初始化,其实就是检测下这个变量有无定义:
$max_depth=$args['max_depth'];//获得设置的最大嵌套数
if(!$commentcount) {
$commentcount = array();//声明为数组
$pagenum=get_query_var('cpage')-1;//获得当前分页(减一是为了后面计算使用)
$page_comment_count=get_option('comments_per_page');//获得设置的每页评论数
$commentcount[0] = $pagenum * $page_comment_count;//$commentcount的第一个元素存入计算得出的前面分页的评论数目
$commentcount[$max_depth]=0;//这里$commentcount[$max_depth]是用数组的最后一个存储上个评论的楼层数,这里初始置为0
}
上面最后一行用到了$commenntcount[$max_depth],我们要用$commentcount数组存储每一层测楼层计数,所以最后一层,即$commenntcount[$max_depth]来存储上一条评论的楼层数,因为我们下面要用到它,来判断是否需要重置相应楼层对应的计数器。
<span class="comment-meta">//我以楼层输出处为例,介绍下后续的处理
//$depth为当前打印的评论的楼层数,$commentcount[$depth-1]即为此楼层对应的计数器,如果不存在就置为1,否则就+1
<?php if(!$commentcount[$depth-1])$commentcount[$depth-1]=1;else $commentcount[$depth-1]++;
$floor = '#'.$commentcount[$depth-1];
//输出楼层显示
echo '<a href="' . htmlspecialchars( get_comment_link( $comment->comment_ID ) ) . '">' . $floor . '</a>';
/* 下面就是重点了,$commentcount[$max_depth]里存储上个评论的嵌套层数,如果上个评论所在层数大于当前评论的层数,说明
当前评论时更高一级评论,所以要重置低级层数的评论的=计数器 */
if($commentcount[$max_depth]&&$commentcount[$max_depth]>$depth){
for ($i=$depth;$i<$max_depth;$i++){//利用循环将低级的计数器都置为0
$commentcount[$i]=0;
}
}
$commentcount[$max_depth]=$depth;//将当前评论层数赋给$commentcount[$max_depth]
?>
</span>
OK,到此就介绍完了,说的比较混乱,大家凑活着看。多级楼层支持任意嵌套层数。
也许还有人不明白何为多级嵌套层数,不明白的同学可以尽情在此篇文章下尽情灌水,尽情嵌套,来观察不同嵌套层数的楼层的变化。
二月
02
WordPress技术: 无限多级楼层显示
wordpress评论分为悬浮@回复和嵌套回复。前者显示楼层容易,一层一层累计下来就行,而后者则麻烦了些,因为如果也一层层按时间顺序累计,那么嵌套的子评论往往会打乱评论的楼层。所以大家普遍采用主评论楼层显示。我曾经也写了一篇关于主评论楼层显示的文章《wordpress指定页面评论数+支持分页的楼层显示》。
现在对这个主评论楼层进行了改进,支持了子评论楼层。
正如图所示,具体的实例,大家可以到这个地址查看,请看仔细些:
多级无限楼层数展示
实现代码
其实实现思路还是原来那种主评论显示方法。主评论显示我们在wp的评论自定义显示调用函数中使用一个全局变量来存储楼层数(分页楼层的计算我这里就不说了,我以前的那篇文章里讲有,很多博友也写过)。
我这里的多级楼层其实也还是使用一个全局变量,只不过这个变量的类型变了,不是一个整型,而是一个数组。同样的我们要在函数里开头部分先声明引入全局变量$comemntcount:
然后是初始化,其实就是检测下这个变量有无定义:
if(!$commentcount) {$commentcount[0] = $pagenum * $page_comment_count;//$commentcount的第一个元素存入计算得出的前面分页的评论数目$commentcount[$max_depth]=0;//这里$commentcount[$max_depth]是用数组的最后一个存储上个评论的楼层数,这里初始置为0上面最后一行用到了$commenntcount[$max_depth],我们要用$commentcount数组存储每一层测楼层计数,所以最后一层,即$commenntcount[$max_depth]来存储上一条评论的楼层数,因为我们下面要用到它,来判断是否需要重置相应楼层对应的计数器。
//$depth为当前打印的评论的楼层数,$commentcount[$depth-1]即为此楼层对应的计数器,如果不存在就置为1,否则就+1$floor = '#'.$commentcount[$depth-1];//输出楼层显示/* 下面就是重点了,$commentcount[$max_depth]里存储上个评论的嵌套层数,如果上个评论所在层数大于当前评论的层数,说明当前评论时更高一级评论,所以要重置低级层数的评论的=计数器 */if($commentcount[$max_depth]&&$commentcount[$max_depth]>$depth){$commentcount[$max_depth]=$depth;//将当前评论层数赋给$commentcount[$max_depth]OK,到此就介绍完了,说的比较混乱,大家凑活着看。多级楼层支持任意嵌套层数。
也许还有人不明白何为多级嵌套层数,不明白的同学可以尽情在此篇文章下尽情灌水,尽情嵌套,来观察不同嵌套层数的楼层的变化。