在 WordPress 中,使用 WP_Query 进行文章查询是最常见的操作,学习好这方面的操作, WordPress 开发基本就学会了一半。
「WordPress果酱」将通过一系列教程讲解如何使用 WP_Query 进行 WordPress 文章查询。
我写这一系列文章的目的也是为了方便自己使用这些参数的时候方便查询,所以如果你也是经常进行 WordPress 二次开发的话,建议收藏本文。
第八讲关于日期相关的参数,日期相关的参数可以让你获取特定时间和日期期间的文章,相关的参数比较多,首先基本的参数:
然后复杂的情况可以使用 date_query 数组参数,这个参数从 3.7 版本开始的, date_query 数组里面的字段参数:
'=', '!=', '>', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' 这些比较方式。获取2012年12月12号的文章:
$query = new WP_Query( 'year=2012&monthnum=12&day=12' );使用 date_query 的话:
$args = array(
'date_query' => array(
array(
'year' => 2012,
'month' => 12,
'day' => 12,
),
),
);
$query = new WP_Query( $args );获取今天的文章:
$today = getdate();
$str = 'year=' . $today['year'] . '&monthnum=' . $today['mon'] . '&day=' . $today['mday'];
$query = new WP_Query($str);使用 date_query 的话:
$today = getdate();
$args = array(
'date_query' => array(
array(
'year' => $today['year'],
'month' => $today['mon'],
'day' => $today['mday'],
),
),
);
$query = new WP_Query( $args );获取这个星期的文章:
$week = date( 'W' );
$year = date( 'Y' );
$query = new WP_Query( 'year=' . $year . '&w=' . $week );使用 date_query 的话:
$args = array(
'date_query' => array(
array(
'year' => date( 'Y' ),
'week' => date( 'W' ),
),
),
);
$query = new WP_Query( $args );获取工作日早上9点到下午五点的文章
$args = array(
'date_query' => array(
array(
'hour' => 9,
'compare' => '>=',
),
array(
'hour' => 17,
'compare' => '<=',
),
array(
'dayofweek' => array( 2, 6 ),
'compare' => 'BETWEEN',
),
),
'posts_per_page' => -1,
);
$query = new WP_Query( $args );获取1月1号到2月28号的文章
$args = array(
'date_query' => array(
array(
'after' => 'January 1st, 2013',
'before' => array(
'year' => 2013,
'month' => 2,
'day' => 28,
),
'inclusive' => true,
),
),
'posts_per_page' => -1,
);
$query = new WP_Query( $args );这里有一点要注意下,如果这里给 before 参数设置了 strtotime() 函数兼容的字符串,那么会被转换成日期加上 00:00:00,在这种情况下,即使 inclusive 参数被设置为 true,该日期也不会包含在查询中。 如果希望包含之前的日期,请同时包含时间,比如:'before' => '2013-02-28 23:59:59',或使用数组格式,设置了 inclusive 就会自动调整。
获取一年前发布并且上个月修改过的文章,使用嵌套的 date_query 查询:
$args = array(
'date_query' => array(
array(
'column' => 'post_date_gmt',
'before' => '1 year ago',
),
array(
'column' => 'post_modified_gmt',
'after' => '1 month ago',
),
),
'posts_per_page' => -1,
);
$query = new WP_Query( $args );