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

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。