web-dev-qa-db-fra.com

WordPress reçoit les publications par date sans query_posts

Je souhaite afficher les messages des 30 derniers jours dans une barre latérale, mais je ne souhaite pas utiliser query_posts. Existe-t-il un moyen d'y parvenir avec la fonction get posts?

2
Chozen

Oui, il suffit d'ajouter un filtre avant de l'appeler et de le supprimer après l'avoir fait.

function filter_where_wpa89154($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_wpa89154');
$args = array(
    'posts_per_page'  => 5,
    'post_type'       => 'post',
    'post_status'     => 'publish',
    'suppress_filters' => false
); 
$posts = get_posts($args);
remove_filter('posts_where', 'filter_where_wpa89154');

remarquez le 'suppress_filters' => false qui est ce qui rend cela possible avec get_posts

5
Bainternet

À partir de la version 3.7, vous pouvez utiliser date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

Donc, cela ressemblerait à:

$args = array(
    'posts_per_page'  => 5,
    'post_type'       => 'post',
    'post_status'     => 'publish',
    'date_query' => array(
        'after' => date('Y-m-d', strtotime('-30 days')) 
    ),
    'suppress_filters' => false
); 
$posts = get_posts($args);
6
Kode