Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Query posts published after a certain date in Wordpress

Tags:

wordpress

I'm trying to write a WP_Query where I'm calling only posts that have been posted after march 2012. I can successfully call posts that are just in March 2012, but struggling to do 'from March 2012 onwards'.

    $current_year = date('2012');
    $current_month = date('>3'); // This doesn't work
    $current_month = date('3'); // This DOES work

    $custom_query = new WP_Query("year=$current_year&monthnum=$current_month&order=ASC&posts_per_page=-1");

Am I missing something simple, or does this have to get more complicated?

like image 946
SparrwHawk Avatar asked May 28 '12 00:05

SparrwHawk


2 Answers

Since WordPress version 3.7, there's the WP_Query argument date_query that works perfectly for this type of query.

As you can see in the Codex, you can specify a date query with the after argument. The after can either be a strtotime()-compatible string, or an array of 'year', 'month', 'day' values.

For your example, something like the following should work:

$args = array(
    'posts_per_page' => -1,
    'date_query'     => array(
        'after' => array(
            'year'  => 2012,
            'month' => 3,
            'day'   => 1,
        ),
    ),
);
$custom_query = new WP_Query( $args );

Or with a strtotime()-string:

$args = array(
    'posts_per_page' => -1,
    'date_query'     => array( 'after' => '2012-03-01' ),
);
$custom_query = new WP_Query( $args );
like image 121
alisspers Avatar answered Nov 17 '22 07:11

alisspers


The "Time Parameters" section in http://codex.wordpress.org/Class_Reference/WP_Query has a note about date ranges. Using the same technique:

$query_string = "order=ASC&posts_per_page=-1";

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    $where .= " AND post_date >= '2012-03-01'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$custom_query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );
like image 44
ltiong_sh Avatar answered Nov 17 '22 09:11

ltiong_sh