WordPressでブログ投稿を一覧ページに表示する際、○月○日から○月○日までといった具合に、日付の範囲指定して表示させたいことなどありませんか?
例えば、○月○日から○月○日までのイベントに関する記事を表示させたいなどが考えられると思います。
そのような場合、「date_query」を上手に使うと、日付の範囲指定をして記事を表示することができるので、とても便利です。
今回は、「date_query」の使い方やパラメーターの種類について、幾通りかの日付の範囲指定を例に、少しご紹介をさせていただきたいと思います。
WP_Queryクラスで「date_query」を利用する
投稿日を指定する場合(例 2015/7/21 )
year、month、dayに取得したい日付をそれぞれセットします。
1 2 3 4 5 6 7 8 9 10 |
$args = array( 'date_query' => array( array( 'year' => 2015, 'month' => 7, 'day' => 21, ), ), ); $query = new WP_Query( $args ); |
投稿日が○年○月○日より以前を指定する場合(例 2015/7/21より以前 )
beforeパラメーターに日付をセットします。
1 2 3 4 5 6 7 8 |
$args = array( 'date_query' => array( array( 'before'=>'2015/7/21' ), ), ); $query = new WP_Query( $args ); |
投稿日が○年○月○日以降を指定する場合(例 2015/7/21以降 )
1 2 3 4 5 6 7 8 9 |
$args = array( 'date_query' => array( array( 'inclusive'=>true, 'after'=>'2015/7/21' ), ), ); $query = new WP_Query( $args ); |
inclusiveに「true」を設定すると、「after」や「before」で指定した日時を含んだ記事が抽出されます。
上記の場合は、2015/7/21を含んだその日以降の記事が抽出されます。
投稿日が○年○月○日から○年○月○日の範囲を指定する場合 (例 2015/6/21~2015/7/21までの範囲を指定 )
1 2 3 4 5 6 7 8 9 10 11 |
$args = array( 'date_query' => array( array( 'compare'=>'BETWEEN', 'inclusive'=>true, 'before'=>'2015/6/21' 'after'=>'2015/7/21' ), ), ); $query = new WP_Query( $args ); |
compareパラメーターに使える条件は、BETWEENの他に以下のような条件指定もあります。
比較演算子 | 内容 |
---|---|
= | 値と一致する |
!= | 値と一致しない |
> | 値より大きい |
>= | 値以上 |
< | 値より小さい |
<= | 値以下 |
LIKE | 値で指定した文字列に一致する場合 |
NOT LIKE | 値で指定した文字列に一致しない場合 |
IN | 値(配列)で指定した何れかに一致する場合 |
NOT IN | 値(配列)で指定した何れかにも一致しない場合 |
BETWEEN | 2つの値で指定した範囲内(境界を含む)場合 |
NOT BETWEEN | 2つの値で指定した範囲外の場合 |
投稿日が○年○月○日かつ○年○月○日といくつかの投稿日を指定する場合 (例 2015/6/21と2015/7/21の記事を指定 )
1 2 3 4 5 6 7 8 9 10 11 |
$args = array( 'date_query' => array( array( 'relation'=>'OR', 'inclusive'=>true, array( 'year'=>2015, 'monthnum'=>6, 'day'=>21 ), array( 'year'=>2015, 'monthnum'=>7, 'day'=>21 ), ), ), ); $query = new WP_Query( $args ); |
テンプレートのループ前でWP_Query( $args )をお使いになる場合は、以下のような使い方になります。
1 2 3 4 5 6 7 |
$the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); // 処理 endwhile; endif; |
「date_query」を使うと、かなり柔軟に日付の範囲指定をした記事の抽出ができますね。
日付で検索するような場面でも使えると思います。