Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get_posts no older than X days - Wordpress

In my Wordpress site, I use this get_posts code:

get_posts(
        array (
            'numberposts' => 5,
            'orderby'=>'comment_count',
            'order'=>'DESC',
            'post_type'   => array ( 'post' )
        )

How do I filter it so that the posts are not older than 10 days? So it should only list posts from the past 10 days.

like image 698
Henrik Petterson Avatar asked Jun 07 '13 23:06

Henrik Petterson


2 Answers

As of 3.7 you can use date_query https://developer.wordpress.org/reference/classes/wp_query/#date-parameters

So it would look like:

$args = array(
    'posts_per_page' => 5,
    'post_type' => 'post',
    'orderby' => 'comment_count',
    'order' => 'DESC',
    'date_query' => array(
        'after' => date('Y-m-d', strtotime('-10 days')) 
    )
); 
$posts = get_posts($args);
like image 131
Kode Avatar answered Oct 29 '22 05:10

Kode


The exemple from the doc should work just fine. get_posts() uses WP_Query() behind the scene to make the actual request. For your case the modified example should look something like this:

// 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('-10 days')) . "'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = get_posts(array (
            'numberposts' => 5,
            'orderby'=>'comment_count',
            'order'=>'DESC',
            'post_type'   => array ( 'post' )
         ));
remove_filter( 'posts_where', 'filter_where' );
like image 22
Lepidosteus Avatar answered Oct 29 '22 07:10

Lepidosteus