在 WordPress 中,使用 WP_Query
进行文章查询是最常见的操作,学习好这方面的操作, WordPress 开发基本就学会了一半。
「WordPress果酱」将通过一系列教程讲解如何使用 WP_Query
进行 WordPress 文章查询。
我写这一系列文章的目的也是为了方便自己使用这些参数的时候方便查询,所以如果你也是经常进行 WordPress 二次开发的话,建议收藏本文。
第八讲关于日期相关的参数,日期相关的参数可以让你获取特定时间和日期期间的文章,相关的参数比较多,首先基本的参数:
- year (int) – 四位数的年份(比如:2021)。
- monthnum (int) – 月份数字(从 1 到 12)。
- w (int) – 一年中的第几周(从 0 到 53)。使用 MySQL WEEK command,取决于 "start_of_week"(一星期开始于) 选项。
- day (int) – 一个月中的第几天(从 1 到 31)。
- hour (int) – 小时(从 0 到 23)。
- minute (int) – 分钟(从 0 到 60)。
- second (int) – 秒(从 0 到 60)
- m (int) – 年月(例如:201307)。
然后复杂的情况可以使用 date_query 数组参数,这个参数从 3.7 版本开始的, date_query 数组里面的字段参数:
- year (int) – 四位数的年份(比如:2021)。
- month (int) – 月份数字(从 1 到 12)。
- week (int) – 一年中的第几周(从 0 到 53)。
- day (int) – 一个月中的第几天(从 1 到 31)。
- hour (int) – 小时(从 0 到 23)。
- minute (int) – 分钟(从 0 到 60)。
- second (int) – 秒(从 0 到 60)
- after (string/array) – 获取之后日期的文章,支持和 strtotime() 函数兼容的字符串,或者 'year', 'month', 'day' 等的字段组成数组。
- year (string) 四位数的年份,默认是空。
- month (string) 月份数字(从 1 到 12)默认是12。
- day (string) 一个月中的第几天(从 1 到 31),默认是本月的最后一天。
- before (string/array) – 获取之前的文章,他的值或者字段和 after 参数一样,也是支持和 strtotime() 函数兼容的字符串,或者 'year', 'month', 'day' 等的字段组成数组。
- year (string) 四位数的年份,默认是空。
- month (string) 月份数字(从 1 到 12)默认是1。
- day (string) 一个月中的第几天(从 1 到 31),默认是1。
- inclusive (boolean) – 对于 after/before 参数,是否包含设置的值。
- compare (string) – 设置指定的值和数据库中的对应的值如何比较,支持:
'=', '!=', '>', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'
这些比较方式。 - column (string) – Posts 表中要查询的列,默认是:'post_date'。
- relation (string) – OR 或者 AND,子数组应该之间的关系,默认是:AND.
获取2012年12月12号的文章:
代码语言:javascript复制$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 );
获取今天的文章:
代码语言:javascript复制$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 );
获取这个星期的文章:
代码语言:javascript复制$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点到下午五点的文章
代码语言:javascript复制$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号的文章
代码语言:javascript复制$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 );