WordPress教程

WordPress 中获取最新被评论的文章列表

阿里云

我之前的 如何使用 WordPress 文章查询排序相关的参数 中详细介绍了文章查询的排序参数,其中介绍可以通过评论数进行排序:

  1. $query = new WP_Query( array(
  2.     'orderby' => 'comment_count'
  3. ) );
也想出现在这里?联系我们
创客主机

但是需求总是不停的变化,现在又有了新需求,获取最新被评论的文章列表,意思就是某篇文章刚被评论,它就排到最前面,在某些社交需求的网站可能需要用到。

因为 WP_Query Class 排序参数没有 comment_date 选项,所以不能直接使用它,那么这样两个表连表查询一般来说只能通过 SQL 来实现了。

但是使用 SQL 来实现可能就会造成 API 不一致的问题,无法直接使用 WP_Query 进行各种操作,所以最好是通过 posts_clauses 接口实现让 WP_Query 排序参数支持 comment_date:

  1. add_filter('posts_clauses', function ($clauses, $wp_query){
  2. 	global $wpdb;
  3.  
  4. 	$orderby	= $wp_query->get('orderby');
  5. 	$order		= $wp_query->get('order') ?: 'DESC';
  6.  
  7. 	if($orderby == 'comment_date'){
  8. 		$clauses['fields']	.= ', ct.comment_post_ID, MAX(ct.comment_ID) as cid';
  9. 		$clauses['join']	= "INNER JOIN {$wpdb->comments} AS ct ON {$wpdb->posts}.ID = ct.comment_post_ID AND ct.comment_parent=0 AND ct.comment_approved NOT IN ('spam', 'trash', 'post-trashed')";
  10. 		$clauses['groupby']	= "ct.comment_post_ID";
  11. 		$clauses['orderby']	= "cid {$order}";
  12. 	}
  13.  
  14. 	return $clauses;
  15. }, 10, 2);

上面的代码简单解释一下,就是通过 posts_clauses 接口实现文章表和评论表连表,然后通过评论时间进行排序获取最新被评论的文章列表。

当然你也可以不需要了解和使用上面的代码,因为 WPJAM Basic 已经整合,你只需要知道最后可以通过下面简单的方式就能够获取最新被评论的文章列表:

  1. $query = new WP_Query( array(
  2.     'orderby' => 'comment_date'
  3. ) );

WordPress 中获取最新被评论的文章列表

已有 122 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!