WordPress函数:WP_Query 如何按照时间查询文章

追格官方小助手/ 2022年07月11日/ WordPress/ 浏览 1854

在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 );


WP_Query 的基础用法可以参考文章:WP_Query 的基础用法简介

发表评论

暂无评论,抢个沙发...

客服 工单