首页 > 分享发现 > 自定义函数实现:wordpress 显示最新评论,且最近一页评论占满

自定义函数实现:wordpress 显示最新评论,且最近一页评论占满

博客里的评论系统是很关键的,这次说的就是对于 wordpress 评论系统的一个改造。

使用过 wordpress 搭建博客的都知道后台可以设置:评论是否分页,每个分页上显示的最大评论数量 以及 是否把最新的评论放在最前面。我们通过设置这几个评论参数可以得到很多种评论排序效果,例如我们设置如下:

  1. 开启评论分页
  2. 每页显示  5 条评论
  3. 最后一页显示最新的评论

按照如上设置,如果有一篇日志有 21条评论,那么日志页面下的评论就会分成 5 页。按照 wordpress 的显示方式会出现:第5页显示一条孤零零的评论,之后的 4 页都显示满满的 5 条评论的情况。用图片示例如下:

默认评论排序

 

我希望得到的评论排序方式是:最新一页是填满的,余下的一条单独显示,如下

希望得到的排序方式

 

经过多方尝试,发现使用默认的 wordpress 评论参数组合得不到希望的结果。网上搜了下,在wordperss 的官网有关于这个需求的帖子 Fill last page of comments。 不过貌似老方法在新版本的 wordpress 不管用了。于是只好通过自定义函数的方式来实现了想要的结果。

直接在 function.php 下添加如下代码:

function fiter_comments_query($comment_args){
	$filtered_comments_args = $comment_args;
	if($comment_args["number"]){
		$comments_count = get_comments_number();
		$per_page = $comment_args["number"];
		if($comment_args['hierarchical'] == 'threaded'){
			$comments_count = get_comments( array(
				'count' => true,
				'parent' => 0,
				'status' => 'approve',
				'post_id' => $comment_args['post_id']
			));
		}
		$comments_count_tmpuser = get_comments(array(
			'count' => true,
			'parent' => 0,
			'status' => 'hold',
			'post_id' => $comment_args['post_id'],
			'author_email'=>$comment_args['include_unapproved'][0]
		));
		$custome_number = $comment_args['number'];
		$pages_count = ceil(($comments_count + $comments_count_tmpuser)/$per_page); 
		$remainder = ($comments_count + $comments_count_tmpuser)%$per_page;

		if ( '' == get_query_var( 'cpage' ) && $pages_count > 1 ) {
			set_query_var( 'cpage', 'newest' == get_option('default_comments_page') ? $pages_count : 1 );
		}
		$page_number = get_query_var('cpage');
		if($page_number > 1){
			$custom_offset = ($comments_count + $comments_count_tmpuser) -($pages_count-($page_number-1))*$per_page;

		}else{
			$custom_offset = 0;
			if($remainder){
				$custome_number = $remainder;
			}

		};
		$filtered_comments_args["offset"] = $custom_offset;
		$filtered_comments_args["number"] = $custome_number;
	}
	return $filtered_comments_args;
}
add_filter('comments_template_query_args','fiter_comments_query',10,1);

思路主要是:人工干预分页前的评论查询条件参数,把最新一页的评论条数从 1 条变成我们设置的每页最大条数,并且最后一页保留余数即可。

留言板 当前主题:0

留言审核后可见.

相关杂记
快递查询插件--快递管家(支持国际件,自动提醒)

双十一到了,剁手族们的购物车内肯定囤积了很多的待购商品,可以想象之后快递员又有的忙了。这里放出一个自制的浏览器插件

阅读更多>>
javascript 里的 new 操作和继承(全记录)

主要是记录下 js 里关于 new 和 继承的细节,因为网上的资料都比较分散,这里汇总下,并且加上了思考的过程。

阅读更多>>
使用CDN来加载js等文件

博客里常常会带有一些代码演示的内容,这时候就希望代码里的关键词能够高亮显示。

阅读更多>>
DOS快餐店连载系列下载

这是很早之前《电脑爱好者》杂志上连载的内容,一共12期,主要是以小故事的形式讲解了 windows 下命令行工具的使用。例如批量重命名,循环等。

阅读更多>>
ionic3 自定义图标文件(亲测可用)

首先准备好用来做图标的 svg 文件,你可以自己用 ai 画或者去网上下载就行啦,如下图所示:

阅读更多>>