Site icon Tips Note by TAM

WordPressのdate_queryパラメータを使って、複雑な期間指定の投稿を取得する

WordPress3.7から追加された、date_queryというパラメータをご存知ですか?

Tips Noteでも、リニューアル後に表示している「PickUP!」部分で、このパラメータを使って3ヶ月以内の記事を取得、表示しています。

このパラメータが追加されるまでは、「今日から3ヶ月間の投稿」だったり、「この日からこの日まで」といった、
少し複雑な条件での日付で投稿を取得するには、SQLを書いて記事を取得しないとできませんでした。

SQL?なにそれおいしいの?

以前、期間指定のSQLを書いたことがありますが、

  • SQL複雑すぎる
  • セキュリティホール怖い
  • あってるのかわからない
  • 負荷大丈夫??

と、戦々恐々としていました。(SQLはきちんと知識のある人にお願いしましょう・・・)

ところが!date_queryのパラメータ実装により、もっと簡単に期間指定ができるようになったのです!

サンプルコード

foreach()内は、アイキャッチや本文など、取得したい項目によって都度書き換えてください。
小難しい、よくわからないSQL文を書くよりもずっとわかりやすいですね!

date_queryに設定できるパラメータは下記の通りです。

パラメータ一覧

パラメータ 説明
year (例)2015
month 1〜12
week その年の週 0〜53
day その月の日 1〜31
hour 時間 0〜23
minute 0〜59
second 0〜59
after ○日後から、という指定を使うときに使用。strtotime互換の文字列で日付を指定するか、以下の配列で年月日を指定 (例)January 1st, 2013
year 2015
month 1〜12
day 1〜12
before ○日前まで、という指定を使うときに使用。strtotime互換の文字列で日付を指定するか、以下の配列で年月日を指定 (例)January 1st, 2014
year (例)2015
month 1〜12
day 1〜12
inclusive before / after を使った時に、指定した日をその期間内に含めるかどうか true もしくは false
compare 指定した値の比較をする。値より大きいか、小さいか、その期間内か、などを指定 =、!=、>、>=、<、<=、IN、NOT IN、BETWEEN、NOT BETWEEN
column 何の時間を基準に投稿を取得するか指定 wp_postsのテーブルの日付に関するテーブル。初期値はpost_date
relation 部分配列の比較をする。ORなら、部分配列に指定したいずれかに該当する投稿が取得され、ANDならすべてに該当する投稿が取得される OR もしくは AND

私がした勘違いや、ハマったポイント

date_queryを調べた時、afterとbefore、inclusiveがいまいちピンときませんでした。
10月10日から11月10日までだから、beforeが10月10日ではないのか?と思ったからです。

覚え方はカンタン、10月10日より後(after)から11月10日より前(before)までの記事を取得するから、
afterは開始日、beforeが終了日なのです。

inclusiveは、直訳で「含んでいる」という意味だったのでafterとbeforeに指定した期間内の投稿かそうではないのか、という勘違いをしました。実際テストコードを書いてその勘違いはすぐ解消されたのですが・・・

inclusiveをtrueにすると、今回の例文で使った2015年9月10日と2015年10月10日に投稿された記事が対象に含まれ、
falseにした場合は含まれない、という意味です。

このdate_queryはWP_Queryのパラメータなので、

  • get_posts
  • query_posts(ただし、このタグは非推奨タグです)

といったテンプレートタグの他、WP_Queryクラスで使用できます。

パラメータを駆使して、思い通りの記事をカンタンに取得しましょう!

参考サイト