More than 1 Year Date Query

Dev asked
wp-query
via

Is it possible to use multiple years with a date query like this -

$args = array(
    'posts_per_page' => '-1',
    'date_query' => array(
        array(
            'year'  => array( 2016, 2017 )
        ),
    ),
);


$posts = new WP_Query(array( $args ) );

I tried this but it doesn’t work

'year'  => array( 2016, 2017 )


Answer
via

You can use before and after, see date arguments.

$args = array(
    'posts_per_page' => '-1',
    'date_query'     => array(
        array(
            'after'  => 'December 31st, 2015', // i.e., 2016+.
            'before' => 'January 1st, 2018', // i.e., before 2018.
        ),
    ),
);
$query = new WP_Query( $args );

Based on an article written by one of the date query committers, it looks like you can use AND OR logic date queries too. So you can also do this.

$args = array(
    'posts_per_page'  => '-1',
    'date_query'      => array(
        'relation'    => 'OR',
        array( 'year' => 2016 ),
        array( 'year' => 2017 ),
    ),
);
$query = new WP_Query( $args );

All possible arguments according to that author.

'date_query' => array(
    'column' => 'optional, column to query against, default is post_date',
    'compare' => 'optional, see WP_Date_Query::get_compare()',
    'relation' => 'optional, OR or AND, how the sub-arrays should be compared, default is AND',
    array(
        'column' => 'see above',
        'compare' => 'see above',
        'after' => 'string or array, see WP_Date_Query::build_mysql_datetime()',
        'before' => 'string or array, see WP_Date_Query::build_mysql_datetime()',
        'inclusive' => 'boolean, for after/before, whether exact value should be matched or not',
        'year' => '4 digit int',
        'month' => 'int, 1-12',
        'week' => 'int, 0-53',
        'day' => 'int, 1-31',
        'hour' => 'int, 0-23',
        'minute' => 'int, 0-60',
        'second' => 'int, 0-60',
    ),
    array(
        ...
    ),
    ..
),
Share This
Posted in: