我正在使用自定義字段和帖子類型在WP中創建一些事件類型帖子。每個事件(後類型:事件)包含以下字段:基於WordPress中的2個日期元鍵獲取事件
- 標題(the_title)
- 說明(the_content)
- 開始日期(meta_key:起始日期)存儲時間戳meta_value
- 結束日期(meta_key :END_DATE)存儲時間戳meta_value
我想是,得到落在日期之間的所有記錄。例如,我想顯示日曆(月視圖)。我想查詢所有在特定月份可能發生的事件。
如果事件是單日期(同一天)或短期(相同月份,跨越幾天)或相鄰月份之間的短距離(幾天,但日期介於四月之間),主要問題是, 2013年和2013年5月,假設)一切正常。但是,當一個事件跨越幾個月時,比如事件從2013年4月20日開始到2013年7月25日結束,它不會顯示。它僅在2013年4月和2013年7月可見 - 而我想在所有發生的月份(4月13日,5月13日,6月13日和7月13日)顯示此信息。
任何人都可以幫我建立一個WP的自定義查詢(WP_Query或直接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)。但我不想比較時間,我只是想挑選這兩個時間戳之間的所有記錄,即使事件的開始日期是上個月的,結束於下一個月或任何即將到來的月份 - 這在邏輯上是發生2013年4月也。
有關事件的例子,我有以下事件:
- 測試賽1:啓動2013年3月1日結束2013年3月10日
- 測試賽2:啓動2013年4月10日結束4月26日,2013
- 測試賽3:啓動2013年4月10日結束2013年5月5日
- 測試賽4:啓動2013年3月15日結束2013年6月10日
謝謝icethrill - 這是一個相當不錯的努力。爲了大家的方便,我添加了代碼和示例事件。請看看,並請幫助。再次感謝。 – 2013-04-29 12:44:37
修改了我的WP_Query,以便它可能適合您的需要。試試看。 – MrZiggyStardust 2013-04-29 13:27:13
嘿,你的解決方法非常好,幾乎接近,但我想把它縮小到僅僅是在當前月份發生這種事件時纔會出現。您的'end_date'> =當天返回的記錄也將在下個月開始記錄。我正在努力解決您的解決方案,以便根據需要進行修復。我也會和你分享。同時你能幫助更多的需要嗎?在此先感謝,並感謝您的幫助。 – 2013-04-29 14:32:40