この記事は最後に更新してから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


お勧め

human_time_diff(2019年11月18日 更新)

string human_time_diff( int $from [ , int $to = '' ] )
時間差を'5分'や'2日'のような感覚的な表現で取得する。

wp_title_rss(2014年4月10日 更新)

void wp_title_rss( [ string $sep = '»' ] )
フィード向けのページタイトルを出力する。

header_textcolor(2012年9月6日 更新)

void header_textcolor()
カスタムヘッダーのテキスト色を表示する。

restore_current_blog(2020年4月7日 更新)

bool restore_current_blog()
ブログを切り替え前に戻す。

add_post_type_support(2012年4月12日 更新)

void add_post_type_support( string $post_type, mixed $feature )
投稿タイプに特徴を追加する。