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?
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 );
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' );
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With