query_postsで記事一覧の期間を指定

※自分に向けての忘備録です。

参考にしたサイト(コード引用元)

本家のフォーラムには神様がいらっしゃる・・・

設置したもの

functions.phpに以下記述

//投稿日の期間指定
global $my_where;
function my_posts_where( $where ) {
  global $my_where;

  return $where . $my_where;
}
function my_query_posts( $query ) {
  global $wpdb, $my_where;

  $q = wp_parse_args( $query );
  $my_where = '';

  if ( $q['date_from'] ) {
    if ( $q['date_to'] )
      $my_where = " AND ( DATE($wpdb->posts.post_date) BETWEEN '" . $q['date_from'] . "' AND '" . $q['date_to'] . "' )";
    else
      $my_where = " AND DATE($wpdb->posts.post_date) >= '" . $q['date_from'] . "'";
  } elseif ( $q['date_to'] ) {
      $my_where = " AND DATE($wpdb->posts.post_date) <= '" . $q['date_to'] . "'";
  }

  add_filter( 'posts_where', 'my_posts_where' );
  query_posts( $query );
  remove_filter( 'posts_where', 'my_posts_where' );
}

テンプレートに以下記述(query_postsをmy_query_postsにする)

my_query_posts( 'date_from=2015-04-01&date_to=2016-03-31')

「&」で繋いでいつものやつも書ける!

my_query_posts( 'date_from=2015-04-01&date_to=2016-03-31&&posts_per_page=10&post_type=post')

これで2015年4月1日から2016年3月31日までに投稿された記事を抽出できます。

この記事にコメントを残す