WordPress按指定时间调用文章(如最近一周、一月、一年)的方法

2016-10-12 15:22 来自:WordPress 评论(2) 查看(2,213)

使用WordPress开发网站,不管是做企业网站,还是个人博客,还是具备下单支付功能的商城。往往少不了诸如”最多关注”、”最多评论”、”热卖商品”等等,总而言之,实际上这就是推荐。当然WordPress默认只有一个评论数据,而诸如销量、浏览量等等是需要通过postmeta来扩充的,关于怎么按照自定义字段进行文章排序可以参考我前两天发布的文章《WordPress按照文章自定义字段进行排序的内部调用方法》。

大家可能都在思考一个这样的问题?既然是按照某个指标进行排序,我们可能听说过马太效应,就拿最多浏览量文章排序来讲,越是热门的文章越会坚挺在最前面。换而言之,在你推荐的位置,很可能永远都是那几篇文章,比如5年后还是现在的某篇文章排在里面;而我们之所以弄一个排序就是供用户参考的,如果时间太长这个参考几乎没有意义。那么我们能不能在加一个约束条件呢?比如一周热门、一月热门、本年度热门等等。

当然,这仅仅是一个基础查询问题,是一定可以实现的。但是我们尽量能使用其自带方法来完成操作,大家可能第一想到的就是query_posts这个方法,但网上写这个方法的参考大多是一些基础查询,而针对这种较为“冷门”的并没有太多关注。这我们可以参考官网文档或者直接参考方法源代码。

实际上,在query.php中,也就是query_posts对应的文件,其实就是一个WP_Query类,在里面有一个$date_query,而它是WP_Date_Query的一个实例。实际上WP_Date_Query类在官网文档中就有,文档地址:https://developer.wordpress.org/reference/classes/wp_date_query/。相关调用规则如下:

$date_query = new WP_Date_Query( array(
	'column' => '可选,日期查询针对的数据列,默认为 post_date',
	'compare' => '可选,一些比较运算的符号,在 WP_Date_Query::get_compare()中 有定义(如 '=', '!=', '>', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN')',
	'relation' => '可选,OR 或者 AND,当下面紧接着设定的日期数组超过 2 组时,通过这个参数来决定其组合关系,默认为 AND',
	array(
		'column' => '要求同上',
		'compare' => '要求同上',
		'after' => '字符串或数组,参考 WP_Date_Query::build_mysql_datetime()',
		'before' => '字符串或数组,参考 WP_Date_Query::build_mysql_datetime()',
		'inclusive' => '布尔值,针对上面的 after/before,是否要精确匹配给定日期',
		'year' => '4 位整数',
		'month' => '整数,1-12',
		'week' => '整数,0-53',
		'day' => '整数,1-31',
		'hour' => '整数,0-23',
		'minute' => '整数,0-60',
		'second' => '整数,0-60',
	),
	array(
		...
	),
	...
) );

然后可以在WP_Query或者query_posts中调用,如调用一个月内最多阅读量的十篇文章。

//时间约束
$date_query=array(
 array(
 'column' => 'post_date',
 'before' => date('Y-m-d H:i',time()),
 'after' =>date('Y-m-d H:i',time()-3600*24*30)
 )
);
//查询条件
$args=array(
 'meta_key' => 'views',
 'orderby' => 'meta_value_num',
 'posts_per_page'=>10,
 'date_query' => $date_query,
 'order' => 'DESC'
 );
//查询
 query_posts($args);
转载请注明出处:WordPress按指定时间调用文章(如最近一周、一月、一年)的方法 - 木泉网
分享:

发表评论

请登录

未登录

  1. 来看看,学习学习!!

    蒂欧娜 2016-10-17 回复
  2. 学习带来乐趣,谢谢博主!

    QQ-58692045 2016-10-25 回复
返回顶部