【发布时间】:2015-12-01 19:55:12
【问题描述】:
我正在编写一个插件,插件添加了一个过滤器。过滤器需要根据帖子 ID(自定义表)从数据库中选择一些东西。现在的问题是,如果在有 20 个帖子的循环中,它会运行 20 个查询,这并不是很好。所以我想知道,是否可以做这样的事情:
- 在说类别页面上运行 wp_query 之后(但在循环之前),获取它返回的 ID 数组
- 使用第 1 步中的数组运行 1 个查询,以获取所有帖子所需的数据并将其存储在全局变量中。
- 在过滤器中从全局变量中检索数据,而不是在每次调用过滤器时运行查询。
我想知道是否可以在前端(例如类别存档等页面,基本上所有 in_the_loop() 为真的地方)和后端(帖子列表、页面列表、cpt 列表)都这样做。我用谷歌搜索了唉找不到任何东西。如果有人知道是否有可能实现,请告诉我。
【问题讨论】:
-
不错的主意,但您会在页面刷新时丢失数据。对象缓存(wp具有内置保存功能,但您需要将其安装在服务器上并放入对象缓存文件,google this)将是一个更好的主意。虽然它有点 ram 密集型,所以另一个选择是设置一个包含所有帖子和所需数据的瞬态(wp 术语)并提供服务。或者使用缓存插件缓存整个 html 页面 = 资源密集度较低。
-
在页面刷新时丢失数据对我来说很好。只要我可以将它从 N 个查询减少到一个查询,这对我来说已经足够了。你知道这是否可能吗?
-
一旦数据运行一次,它也取决于您使用的功能,如果没有缓存,则获取 post meta 将保存该值(在变量中),因此任何相同的请求不要进行另一个数据库查询。
标签: wordpress