こんにちは、ryohei(@ityryohei)です!

本記事では、WordPressのWP_Queryを使って、現在の日付から何日前を指定して投稿を取得する方法をご紹介しています。

WordPressで今日から何日か前の日付を指定して投稿を取得したいんだけど、良い方法ないかな?

上記の疑問にお答えしています。

では、解説していきます。

期間指定には「date_query」を使おう!

WP_Queryで日付や期間を指定する場合、いくつかパラメータが用意されています。下記のページに一覧がありますので、詳細はリンク先をご参照ください。

関数リファレンス / WP Query – WordPress Codex

日付の指定であれば「year」や「monthnum」を、期間を指定する場合は「date_query」使用します。今回は開始日・終了日の期間を指定して投稿を取得する必要があるため、「date_query」を使用していきます。

date_queryが使用できるのはWordPress3.7~以降となりますのでご注意ください。

「date_query」で現在の日付から何日前を指定して投稿を取得する

ではさっそく投稿を取得していきましょう!

「date_query」を使用するにあたってあまり引っかかる部分はなかったのですが、予め下記の内容を覚えておくとより良いかもしれません。

after 開始日を指定する
before 終了日を指定する
column wp_posts」のカラムを指定します。デフォルトは「’post_date’」となります。
inclusive after/beforeに指定された日付を含めるかを真偽値で指定する

上記を踏まえて記事を取得してみましょう。まずはPHPのdate()関数を使った方法から。条件は現在の日付から「7日前」までの、指定した日付を含む投稿とします。

<?php

$args = array(
'post_type' => 'post_type_name',
'posts_per_page' => -1,
'date_query' => array(
array(
'after' => date("Y-m-d", strtotime("-7 day")),
'before' => date("Y-m-d"),
'inclusive' => true,
),
),
);
$the_query = new WP_Query( $args );

if($the_query->have_posts()):while($the_query->have_posts()):
$the_query->the_post();

//ここに処理

endwhile; endif;
wp_reset_postdata();

?>

他にはデータベースの「wp_posts」テーブルの情報を使って、より直感的に書く方法もあります。下記の場合は「post_date」の値を使って投稿情報を取得しています。

<?php

$args = array(
'post_type' => 'job',
'posts_per_page' => -1,
'date_query' => array(
array(
'before' => 'today',
),
array(
'after' => '7 day ago',
),
'column' => 'post_date',
'inclusive' => true,
),
);
$the_query = new WP_Query( $args );

if($the_query->have_posts()):while($the_query->have_posts()):
$the_query->the_post();

//ここに処理

endwhile; endif;
wp_reset_postdata();

?>

最後に

WordPressで期間指定をして記事を取得するケースはイベントやキャンペーン商品などで使用する機会があるかと思います。「date_query」を使用すれば複雑な期間指定も容易に指定することができますので、指定方法を知っておくと役に立つかもしれないですね!

以上、WordPressのWP_Queryで現在の日付から何日前を指定して投稿を取得する方法のご紹介でした!