【发布时间】:2015-03-13 08:25:27
【问题描述】:
问题
就选择日期而言,WordPress 元查询不如常规查询灵活。 WP Query 可以通过月份编号、星期几名称和许多其他选项来选择日期,这非常适合我的需要。
ACF 字段
事件日期、结束日期、死亡日期(某些分类法)、“重复(永远,直到)”
基本上,我构建了一个元查询,它将获取今天登陆的日期,或者可能会重复出现的日期(因此每天、每月和每周),然后我通过 PHP 通过与每周的工作日名称进行比较来过滤所有内容,并且每月的天数。我还会检查以确保任何重复发布的帖子都不会在不应该出现的时候出现。
这是我一直使用的元查询数组,日期存储为Ymd:
'relation' => 'OR', [ 'key' => 'event_date', 'value' => $date->format('md'), 'compare' => 'LIKE', 'type' => 'numeric' ], [ 'key' => 'death_date', 'value' => $date->format('md'), 'compare' => 'LIKE', 'type' => 'numeric' ], [ 'key' => 'how_often', 'value' => array('Daily', 'Monthly', 'Weekly'), 'compare' => 'IN' ]
从长远来看,这个查询将检索大约 130 个帖子,包括元和其他相关查询,并且在 PHP 运行过滤帖子之后(需要 2.5 秒!)我剩下 78 个帖子。
我的尝试
我已经尝试通过非常具体地针对重复发布的帖子来限制查询,例如指定event_date 必须是<= 查询日期,并且end_date 是>= 查询日期或元forever 设置为forever。但是,当涉及到每月或每周重复时,这将无济于事,因为我无法切实计算这些日期。我已经加载了超过 10k 个帖子并使用了这个自定义元结构。它运行良好,最多有大约 1200 个帖子,然后网站变得非常缓慢。包含 78 个帖子的页面目前加载第一个字节大约需要 8-12 秒。
我已尝试缓存此数据,但有人可能会点击日历中的任何一天,并且它可能不会被缓存,这将导致用户在看到来自该站点的任何内容之前被阻止 8-12 秒。
问题
- 通过 SQL 检索每月和每周周期性帖子的最佳方法是什么?
- 这实际上会加快我的页面加载速度还是减慢速度?显然,随着帖子越多,对元数据的查询就越多,但分页并不是这个应用程序的真正选择。
【问题讨论】:
标签: mysql performance advanced-custom-fields wordpress