包含WP_QUERY和介于

时间:2016-07-15 作者:Will Ashworth

背景故事我们在events 自定义帖子类型。它们各自具有以下关联的自定义字段:

  • start_date
  • end_date
在前端,我们有一个带有过滤器的侧栏,用户可以选择如何搜索事件(即各种分类法、城镇旅行的开始日期、结束日期等)。这个event_beginevent_end 搜索输入是我们用来查询数据库的内容。

问题是,我遇到了一些问题,包括查询不严格的结果。出现了严格的匹配,但项目的涉众表示搜索太严格了。我提出了放弃前端的概念event_end 字段,但我自己也不完全确定这是否有必要。

如果我搜索事件,我可以meta_query 其中:

开始日期和结束日期介于两个选定日期之间的事件将显示,开始日期介于两个选定日期之间的事件将显示,结束日期介于两个选定日期之间的事件将显示

  • event_begin 2016年7月15日event_end 2016年7月15日。。。但在数据库中有一个事件,其自定义字段显示该事件实际为一周,时间为2016年7月11日至2016年7月16日。

    该事件不会从我的查询中返回,因为上述所有事件都不匹配。但从技术上讲,如果我在2016年7月15日(今天)进城,我应该能够在当天出差期间看到(并可能参加)该活动。

    想法通常,我们不会将事件范围存储为系列中每天的单独日期。我们(作为人类)存储日期范围;所以我相信有一些合乎逻辑的方法来解决这个问题。只是在我的搜索或研究中没有发现任何东西。

    感谢您的帮助和想法!

1 个回复
SO网友:Rarst

这有点难思考meta_query 这种复杂情况的代码,无法访问数据。:)

您的工作可以表示为以下两个条件:

  • start_date 之间event_beginevent_end
  • end_date 之间event_beginevent_end
你的第一个病例似乎与两者之间的情况无关,因为这两个病例无论如何都会被抓住。

剩下的部分面临的挑战是,您需要反向逻辑-event_beginevent_end 之间start_dateend_date. 但你不能用同样的方式来表达,因为这些都是每个事件所特有的。

但你真的不在乎他们什么时候来,只在乎他们在搜索日期前后。

因此,还有两个条件可以表示为:

(笑声)start_date <;=event_begin ) 和(end_date >= event_begin ) (搜索开始时或前后的事件日期)start_date <;=event_end ) 和(end_date >= event_end ) (事件日期在搜索端或搜索端附近)同样,我很难将其写成“理论上”的元查询,但由于元查询可以嵌套,您应该能够将这一切都塞进它们的逻辑中。

PS性能可能成为一个考虑因素,需要聚合多个简单查询,而不是单个复杂查询。

相关推荐

WordPress使用AJAX的UPDATE_USER_META onClick按钮

我有一个按钮,限制为7次单击,当单击数字5被禁用时,我的问题是,如果用户从不同的设备登录,计数将从0开始,与刷新页面相同。我的需要是,在user\\u meta中保存单击编号结果,如果再次单击,则更新,直到单击编号5,按钮更改为禁用。在DB user\\u meta info中:user\\u id:user\\u idmeta\\u键:clickCounterTravmeta\\u值:1(单击次数)这是页面加载时的代码,如果单击次数大于,则禁用按钮;4.Do Not Work:<script>