在WordPress中,如果需要将文章按年月归档查询,或者有其他按时间查询文章的需求,该怎么办呢?
WordPress中,WP_Query 提供了大量时间相关的参数,详细说明如下:
year (int) – 4数字格式的年 (例如 2011);
monthnum (int) – 月份 (1 - 12);
w (int) – 一年中的星期,0 - 53;
day (int) – 一月中的日子 (1 - 31);
hour (int) – 24小时 (0 - 23);
minute (int) – 分钟 (0 - 60);
second (int) – 秒 (0 - 60);
m (int) – 年月,6数字格式 (例如 201307);
代码示例:
1. 查询2012年12月12日的文章
// 方法1
$query = new WP_Query( 'year=2012&monthnum=12&day=12' );
// 方法2
$args = array(
'date_query' => array(
array(
'year' => 2012,
'month' => 12,
'day' => 12,
),
),
);
$query = new WP_Query( $args );
2. 查询【今天】的文章
// 方法1
$today = getdate();
$query = new WP_Query( 'year=' . $today['year'] . '&monthnum=' . $today['mon'] . '&day=' . $today['mday'] );
// 方法2
$today = getdate();
$args = array(
'date_query' => array(
array(
'year' => $today['year'],
'month' => $today['mon'],
'day' => $today['mday'],
),
),
);
$query = new WP_Query( $args );
3. 查询【本星期】内的文章
// 方法1
$week = date( 'W' );
$year = date( 'Y' );
$query = new WP_Query( 'year=' . $year . '&w=' . $week );
// 方法2
$args = array(
'date_query' => array(
array(
'year' => date( 'Y' ),
'week' => date( 'W' ),
),
),
);
$query = new WP_Query( $args );
在上面的示例中,方法2都用到了参数 date_query。这个参数可以说是相当复杂,本身是一个数组,包含的字段很多。
year (int) – 4位数年份(例如2011年);
month (int) – 月数(从1到12);
week (int) – 一年中的一周(从0到53);
day (int) – 当月的某一天(从1到31);
hour (int) – 小时(从0到23);
minute (int) – 分钟(从0到59);
second (int) – 秒(0到59);
after (string/array) – 查询文章的日期。接受strtotime()-兼容的字符串或“year”、“month”、“day”值的数组:year (string) 接受任何四位数的年份,默认值为空;month (string) 一年中的月份。接受数字1-12,默认值:12;day (string) 每月的第几天,接受数字1-31,默认值:月的最后一天;
before (string/array) – 检索之前帖子的日期。接受strtotime()-兼容的字符串或“year”、“month”、“day”值的数组:year (string) 接受任何四位数的年份,默认值为空;month (string) 一年中的月份,接受数字1-12,默认值:1;day (string) 每月的第几天,接受数字1-31,默认值:1;
inclusive (boolean) – 用于“after/before,是否应匹配精确值”;
compare (string) – 参考 WP_Date_Query::get_compare();
column (string) – 查询比较所用的字段,默认: ‘post_date’;
relation (string) – OR 或者 AND, 子数组之间的关系;
4. 查询上午9点到下午5点之间的文章
$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 );
5. 查询2月份的文章
$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 );
6. 查询1年前发布,1月前修改过的文章
$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 );