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


お勧め

get_the_tag_list(2018年5月27日 更新)

string get_the_tag_list( [ string $before = '' [ , string $sep = '' [ , string $after = '' ] ] ] )
投稿記事の投稿タグ(リンク付き)の列挙した文字列を取得する。

get_theme_file_path(2018年5月27日 更新)

string get_theme_file_path( string $file = '' )
テーマ内にあるファイルのパス名を取得する。

wp_list_pages(2015年4月28日 更新)

string wp_list_pages( [ mixed $args = '' ] )
固定ページを一覧表示する。

wp_schedule_single_event(2014年5月26日 更新)

void wp_schedule_single_event( int $timestamp, string $hook [ , array $args = array() ] )
一度だけ実行するアクションをスケジュールに登録する。

get_users(2017年11月27日 更新)

array get_users( [ array $args = array() ] )
ユーザー情報を取得する。