カスタム フィールドと投稿タイプを使用して、WP でいくつかのイベント タイプの投稿を作成しています。各イベント (投稿タイプ: events) には次のフィールドが含まれます。
- タイトル (the_title)
- 説明 (the_content)
- 開始日 (meta_key: start_date) はタイムスタンプを meta_value に格納します
- 終了日 (meta_key: end_date) はタイムスタンプを meta_value に格納します
私が欲しいのは、日付の間にあるすべてのレコードを取得することです。例えば、カレンダー(月表示)を表示したい。特定の月に発生する/発生する可能性のあるすべてのイベントを照会したいと考えています。
主な問題は、イベントが単一の日付 (同じ日) または短い範囲 (同じ月、数日にまたがる) または隣接する月間の短い範囲 (数日、ただし日付が 2013 年 4 月から 2013 年 5 月までの範囲) である場合です。 ) すべて正常に動作します。しかし、イベントが 2013 年 4 月 20 日に開始し、2013 年 7 月 25 日に終了する場合のように、イベントが複数の月にまたがる場合、そのイベントは表示されません。2013 年 4 月と 2013 年 7 月にのみ表示されますが、発生するすべての月 (4 月 13 日、5 月 13 日、6 月 13 日、7 月 13 日) に表示したいと考えています。
この問題を解決するために、WP のカスタム クエリ ( WP_Query または Posts および Posts Meta テーブルに対する直接の MySQL クエリ) を作成するのを手伝ってくれる人はいますか? 開始日と終了日をタイムスタンプで保存する 2 つのメタ フィールド (上記のとおり) があることに注意してください。
- 編集 -
私が現在使用しているものを理解するために、以下は私が使用している SQL クエリです。
SELECT DISTINCT
wpmh_posts.*
FROM
wpmh_posts, wpmh_postmeta
WHERE
wpmh_posts.ID = wpmh_postmeta.post_id
AND wpmh_posts.post_status = 'publish'
AND wpmh_posts.post_type = 'events_calendar'
AND (
(
(
wpmh_postmeta.meta_key='wpcf-start_date'
AND wpmh_postmeta.meta_value >= 1364774400
) OR (
wpmh_postmeta.meta_key='wpcf-end_date'
AND wpmh_postmeta.meta_value >= 1364774400
)
) OR (
(
wpmh_postmeta.meta_key='wpcf-start_date'
AND wpmh_postmeta.meta_value <= 1367366399
) OR (
wpmh_postmeta.meta_key='wpcf-end_date'
AND wpmh_postmeta.meta_value <= 1367366399
)
)
)
ORDER BY
wpmh_postmeta.meta_value ASC
1364774400 は 2013 年 4 月 1 日のタイムスタンプで、1367366399 は 2013 年 4 月 30 日のタイムスタンプです (明らかに、それぞれ時刻 00:00:00 と 23:59:59 が含まれています)。しかし、私は時間を比較したくありません。イベントの開始日が前月であり、次の月または次の月のどこかで終了していても、これら 2 つのタイムスタンプの間にあるすべてのレコードを選択したいだけです。これは、論理的に発生するイベントです。 2013年4月も。
イベントの例として、次のイベントがあります。
- テストイベント 1: 2013 年 3 月 1 日開始 2013 年 3 月 10 日終了
- テストイベント 2: 2013 年 4 月 10 日開始 2013 年 4 月 26 日終了
- テストイベント 3: 2013 年 4 月 10 日開始 2013 年 5 月 5 日終了
- テストイベント 4: 2013 年 3 月 15 日開始 2013 年 6 月 10 日終了