gpt4 book ai didi

mysql - 在 WordPress 中根据 2 个日期元键获取事件

转载 作者:行者123 更新时间:2023-11-29 13:53:33 25 4
gpt4 key购买 nike

我正在使用自定义字段和帖子类型在 WP 中创建一些事件类型帖子。每个事件(帖子类型:事件)包含以下字段:

  • 标题(the_title)
  • 描述(the_content)
  • 开始日期(meta_key: start_date)在meta_value中存储时间戳
  • 结束日期(meta_key: end_date)在 meta_value 中存储时间戳

我想要的是获取日期之间的所有记录。例如,我想显示日历(月 View )。我想查询特定月份中发生/可能发生的所有此类事件。

主要问题是,如果事件是单一日期(同一天)或短范围(同一月,跨越几天)或相邻月份之间的短范围(几天,但假设日期范围在 2013 年 4 月到 2013 年 5 月之间)一切正常。但是,当事件跨越数月时,例如事件于 2013 年 4 月 20 日开始并于 2013 年 7 月 25 日结束,则不会显示。它仅在 2013 年 4 月和 2013 年 7 月可见 - 而我想在所有发生的月份(2013 年 4 月、2013 年 5 月、2013 年 6 月和 2013 年 7 月)显示此信息。

任何人都可以帮助我构建 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 日开始,2013 年 4 月 26 日结束
  • 测试事件 3:2013 年 4 月 10 日开始,2013 年 5 月 5 日结束
  • 测试事件 4:2013 年 3 月 15 日开始,2013 年 6 月 10 日结束

最佳答案

编辑:修改下面的 WP_Query

如果您不分享自己的代码,就很难为您提供良好的帮助。

我在 WordPress 中使用了以下代码来自定义日历:

// Query arguments for upcoming events query
$args = array(
'meta_query' => array(
array(
'key' => 'end_date',
'value' => strtotime(date("Y-m-d")), // Uses current server timestamp now
'compare' => '>=',
'type' => 'NUMERIC' // I think you will need to use numeric here, instead of datestamp
)
),
'orderby' => 'meta_value_num', // Edit: Changed this so its sorted after numeric value
'meta_key' => 'start_date', // Sort after 'start_date'
'post_type' => 'events_calendar', // Change this value to your own 'post_type_name'
'posts_per_page' => -1,
'order' => 'ASC',
);

// The Query
$upcoming_events_query = new WP_Query( $args );

while ( $upcoming_events_query->have_posts() ) : $upcoming_events_query->the_post();
// Your template code here!
endwhile;
wp_reset_query();

帖子将在 start_date 之后排序,但超过结束日期的事件将从查询中排除。

只有当您的所有事件 start_date 和 end_date 值都保存为以下日期格式时,此功能才有效:“Y-m-d” - 此查询仅在日期上进行了测试,并且尚未与日期中的时间相结合。在最坏的情况下,这可能会给你一些可以借鉴的东西。

如果您需要更多帮助,请分享您的代码。

关于mysql - 在 WordPress 中根据 2 个日期元键获取事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com