この記事は最後に更新してから1年以上経過しています。
説明
WordPress 3.7.0ではWP_Date_Queryクラスが追加され、WP_Queryクラス(もちろん query_posts関数でも)で利用できるようになった。このWP_Date_Queryにより、○年○月○日以前や以降の投稿情報を取得したり、○年○月○日から○年○月○日の範囲の投稿情報を取得したりといったことが、容易に行えるようになった。
WP_Date_Queryクラスは/wp-includes/date.phpに記述されており、その機能は3.1.0で追加されたWP_Tax_Queryクラスや3.2.0で追加されたWP_Meta_Queryクラスに似ている。実際にWP_Queryクラスやquery_posts関数で投稿日時などの範囲指定を行う場合は、WP_Date_Queryクラスの存在を意識することはない。
ケース1 投稿日を指定
検索条件として投稿日を指定する場合、従来通りのほか、新しいパラメータdate_queryが利用できるようになった。パラメータdate_queryの値は配列の入れ子に注意すること。配列が入れ子になる理由は、次のケースを見ればわかる。
/* 従来通りの指定方法 */
$result = new WP_Query( 'year=2013&monthnum=10&day=30' );
/* パラメータdate_queryを利用する方法 */
$result = new WP_Query( array( 'date_query'=>array( array( 'year'=>2013, 'monthnum'=>10, 'day'=>30 ) ) ) );
ケース2 投稿日が○年○月○日より前を指定
ケース1の条件指定の配列に'before'を追加すると、指定日以前の投稿情報を検索できる。
$result = new WP_Query( array(
'date_query'=>array(
array(
'before'=>'2013/11/1' )
) ) );
時間を省略しているので、投稿日時が'2013/11/1 0:00:00'と解釈され、この日時より前の投稿記事が対象となる。
ケース3 投稿日が○年○月○日以降を指定
ケース1の条件指定の配列に'after'を追加すると、指定日以降の投稿情報を検索できる。
$result = new WP_Query( array(
'date_query'=>array(
array(
'inclusive'=>true,
'after'=>'2013/9/1' )
) ) );
時間を省略しているので、投稿日時が'2013/9/1 0:00:00'と解釈され、この日時より前の投稿記事が対象となる。
注意したいのは'inclusive'でtrueを指定することで、'after'および'before'で指定した日時を含んだ投稿情報が対象となる。
ケース4 投稿日が○年○月○日から○年○月○日の範囲指定
'compare'に'BETWEEN'を、'after'と'before'にそれぞれ日付の文字列か連想配列を指定することで、範囲指定で検索できる。
$result = new WP_Query( array(
'date_query'=>array(
array(
'compare'=>'BETWEEN',
'inclusive'=>true,
'after'=>'2013/9/1',
'before'=>'2013/10/31 23:59:59' )
) ) );
'inclusive'をtrueにするか、falseにするかを意識して、'after'と'before'を指定すること。
ケース5 投稿日が○年○月○日と○年○月○日
いくつかの投稿日を指定する場合は、'relation'に'OR'を指定し、その後に目的の日付の連想配列を指定する。
$result = new WP_Query( array(
'date_query'=>array(
'relation'=>'OR',
array( 'year'=>2013, 'monthnum'=>9, 'day'=>15 ),
array( 'year'=>2013, 'monthnum'=>10, 'day'=>30 ) ) ) );
ケース6 投稿日が○年○月○日より前で更新日時が○年○月○日以降
条件の連想配列に'column'として'post_modified'を指定すると、更新日時を検索対象にできる。
$result = new WP_Query( array(
'date_query'=>array(
array(
'before'=>'2013/10/1' ),
array(
'column'=>'post_modified',
'inclusive'=>true,
'after'=>'2013/10/15' ),
) ) );
ケース1~5では'column'を省略しており、省略時は投稿日時('post_date')となっている。'column'には'post_date'、'post_date_gmt'、'post_modified'、'post_modified_gmt'、'comment_date'、'comment_date_gmt'が指定できる。
'compare'や'relation'には紹介した値以外も指定でき、もっと多彩な様々な組み合わせで検索できる。まあ主だった検索方法はこんな感じだろう。
最終更新 : 2015年03月07日 16:23
関連
お勧め
add_shortcode(2018年5月27日 更新)
get_user_setting(2022年1月31日 更新)
have_posts(2018年5月27日 更新)
in_category(2018年5月27日 更新)
add_feed(2024年6月24日 更新)