[亲测]WordPress获取指定天数内的热评文章列表

好久没更新了,今天看到一道友提出这样的问题:

wordpress获取指定多少天内的热评文章列表
https://zhidao.baidu.com/question/988123512698910379.html

很长一段时间都没有看到道友能提出wordpress有质量的问题了,决定亲自分享下自己测试的方法及代码,不废话,直接看以下说明:

一、焦点
1、指定天数
这个可以通过指定日志的日期期间实现,比如

post_date <= '2017-05-18' and post_date >= '2017-05-01'

即可查询出这十几天内的文章
2、热评
统计日志评论数降序排列即可实现热评的效果

二、实现
1、方法一:使用mysql原生语句实现

global $wpdb;
$sql = "select * from $wpdb->posts 
where post_date <= '2017-05-18' and post_date >= '2017-05-01'
and ID in ( SELECT comment_post_ID FROM $wpdb->comments group by comment_post_ID ORDER BY count(comment_post_ID) DESC) LIMIT 0, 20";

// SELECT comment_post_ID FROM $wpdb->comments group by comment_post_ID ORDER BY count(comment_post_ID) DESC 
// 统计日志评论数降序排列并返回对应的日志ID

$r = $wpdb->get_results( $sql ); 
//var_dump($wpdb);
if ( ! is_wp_error($r)  ) {
	foreach ($r as $key => $post) {
		printf('

%s

', get_the_title( $post->ID )) ; } }

2、方法二:使用WP_Query和WP_Date_Query实现

$post_ids = $wpdb->get_col("SELECT comment_post_ID FROM $wpdb->comments group by comment_post_ID ORDER BY count(comment_post_ID) DESC");

$query_vars = array(
		// https://core.trac.wordpress.org/ticket/18694#comment:4
		'date_query' 	 => array(
				array(
					'before'	=> '2017-05-18',
					'after' 	=> '2017-05-01',
					'inclusive' => true,
					)
			),
		'posts_per_page' => 20

	);
if ( $post_ids )
	$query_vars['post__in'] = $post_ids;

global $wp_query;
$wp_query = new WP_Query($query_vars);
//var_dump($wp_query);
	while( have_posts() ) : the_post();
		the_title( '

', '

' ); endwhile; wp_reset_query();

代码中关于date_query,可以参考官网#ticket18694中的说明

比较两种方法发现,原生语句的实现较为便捷,这主要取决于生产环境下的需求。
(完)

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注