Custom time range for the posts_where filter

You can set your own custom query vars in a query, then use that value to set a class variable that you later read in the filter:

class WPA69844_where {
    var $days;

    public function __construct(){
        add_action( 'parse_query', array( $this, 'parse_query' ) );
    }

    public function parse_query( $query ) {
        if( isset( $query->query_vars['my_days_var'] ) ):
            $this->days = $query->query_vars['my_days_var'];
            add_filter( 'posts_where', array( $this, 'filter_where' ) );
            add_filter( 'posts_selection', array( $this, 'remove_where' ) );
        endif;
    }

    public function filter_where($where="") {
        $where .= " AND post_date > '" . date('Y-m-d', strtotime('-' . $this->days . ' days')) . "'";
        return $where;
    }

    public function remove_where() {
        remove_filter( 'posts_where', array( $this, 'filter_where' ) );
    }


}
$wpa69844_where = new WPA69844_where();

Then for your query:

$args = array( 'my_days_var' => 30 );
$posts = new WP_query( $args );

Leave a Comment