web-dev-qa-db-ja.com

WordPressはquery_postsなしで日付で投稿を取得します

サイドバーで過去30日間の投稿を取得したいのですが、query_postsを使用したくないです。投稿取得機能でこれを達成する方法はありますか。

2
Chozen

はい、呼び出す前に単純にフィルタを追加し、実行した後に削除するだけです。

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');

これが'suppress_filters' => falseで起こるのはget_postsです。

5
Bainternet

3.7以降ではdate_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters を使用できます。

だからそれはようになります:

$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);
7
Kode