How to get posts published between a date and today?

Is it a way to get posts published between a date and today with query_posts() ?

Example : All posts published since 2012-04-01

Read More

Thanks

EDIT :

How to add the filter date on this Query Posts ?

query_posts( array(  
    array('post'),
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array('post-format-image')
        )
    ),
    'cat' => '-173',
    'post_status' => 'publish'
) );

Related posts

Leave a Reply

3 comments

  1. UPDATE December 23 2014

    There is a better method using date_query property of WP_Query class:

    $args = array(
        'post_type' => 'post', 
        'tax_query' => array(
            array( 
                'taxonomy'  => 'post_format',
                'field'     => 'slug',
                'terms'     => array( 'post-format-image' )
            )
        ),
        'cat'           => '-173',
        'post_status'   => 'publish',
        'date_query'    => array(
            'column'  => 'post_date',
            'after'   => '- 30 days'
        )
    );
    $query = new WP_Query( $args );
    

    OLD ANSWER

    Use the Time Parameters in WP_Query()

    Quoting example from the Codex:

    Return posts from the last 30 days:

    // This takes your current query, that will have the filtering part added to.
    $query_string = array(
        'post_type' => 'post', 
        'tax_query' => array(
            array(
                'taxonomy'  => 'post_format',
                'field'     => 'slug',
                'terms'     => array( 'post-format-image' )
            )
        ),
        'cat'           => '-173',
        'post_status'   => 'publish'
    );
    
    // Create a new filtering function that will add our where clause to the query
    function filter_where( $where = '' ) {
        // posts in the last 30 days
        $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
        return $where;
    }
    
    add_filter( 'posts_where', 'filter_where' );
    $query = new WP_Query( $query_string );
    remove_filter( 'posts_where', 'filter_where' );
    

    Edit
    (in response to the OP’s updated question).

    Avoid using query_posts. You can use the above technique to alter your main query (subject to some extra conditionals – is home page, is a page called ‘foobar’ etc. ):

    function wpse52070_filter_where( $where = '' , $query ) {
       if( $query->is_main_query() && is_page( 'foobar' ) ){
          // posts in the last 30 days
          $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
       }
    
        return $where;
    }
    add_filter( 'posts_where', 'wpse52070_filter_where' );
    
  2. If you wish to get posts between two dates, then use the before and after parameters in the date_query parameter,

    $query_string = array(
      'post_type' => 'post', 
      'date_query' => array(
        'column' => 'post_date',
        'after' => '2012-04-01',
        'before' => '2012-04-30' 
      ),
      'tax_query' => array(
          array( 
             'taxonomy' => 'post_format',
             'field' => 'slug',
             'terms' => array('post-format-image')
          )
      ),
      'cat' => '-173',
      'post_status' => 'publish'
    );