wordpressargumentsarchivecustom-post-typeadd-filter

Showing posts between a certain date range


Trying to display my custom post types for specific date ranges. I want to show posts only within a certain month. I know I need to hook into the posts_where filter, but I can not figure out how to pass arguments to this function, as I need to pass the date range.

I have seen plenty of examples of how to alter the WHERE clause to take a date range, but only when static. I need to do the following:

add_filter('posts_where', 'my_custom_where', '', '04/2011'); //pass my date to the filter

function my_custom_where( $where = '' ) {

    //figure range  
    $range = array(
        'start' => $date . '-1',
        'end' => $date . '-' . cal_days_in_month(CAL_GREGORIAN, date('m', $date), date('Y', $date))
    );

    $where .= " AND post_date ....."; //build where with date range

    return $where;

}

Hope that makes sense. Any help would be appreciated.


Solution

  • You can make it dynamic if you resort to global variables.(Not ideal, but hey, I haven't found a cleaner way...)

    First define a global variable for the date

    $GLOBALS['start_date'] = '2011-07-31';
    

    then add your filter

    add_filter( 'posts_where', 'filter_where' );
    
     function filter_where( $date, $where = '' ) {
        // posts later than dynamic date
        $where .= " AND post_date >= '" . date('Y-m-d H:i:s', strtotime($GLOBALS['start_date'])) . "'";
        return $where;
    }
    

    Then remove the filter if you just want to run that for a single query.