WordPressのdate_queryパラメータを使って、複雑な期間指定の投稿を取得する
WordPress3.7から追加された、date_queryというパラメータをご存知ですか?
Tips Noteでも、リニューアル後に表示している「PickUP!」部分で、このパラメータを使って3ヶ月以内の記事を取得、表示しています。
このパラメータが追加されるまでは、「今日から3ヶ月間の投稿」だったり、「この日からこの日まで」といった、
少し複雑な条件での日付で投稿を取得するには、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クラスで使用できます。
パラメータを駆使して、思い通りの記事をカンタンに取得しましょう!