我正在使用自定义字段和帖子类型在 WP 中创建一些事件类型的帖子。每个事件(帖子类型:事件)包含以下字段:
- 标题(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 月可见 - 而我想在所有发生的月份(2013 年 4 月、13 年 5 月、13 年 6 月和 13 年 7 月)显示它。
谁能帮我建立一个 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)。但我不想比较时间,我只想选择所有那些介于这两个时间戳之间的记录,即使事件的开始日期是上个月的并在下个月或下个月的某个地方结束——这在逻辑上是一个发生的事件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 日结束