如何组织和缓存与术语相关的附加数据?

时间:2011-05-21 作者:mfields

我正在更新我的一个插件,很难找到构建特定功能的“最佳方法”。该插件允许用户将媒体库中的图像与任何分类法的任何术语相关联。我目前正在创建用户可以添加到主题和插件中的函数,以获取插件存储的数据。到目前为止,我的代码可以在这里查看:https://github.com/mfields/Taxonomy-Images/blob/master/public-filters.php

此文件中提供的功能允许用户获取当前正在查询的术语的图像(用于分类归档视图),另一个功能基本上是核心功能的包装器get_terms() 它将返回给定分类法的所有术语,同时将图像id添加到每个术语对象。在发布之前,我想在文件中添加第三个函数。这将是get_the_terms() 并将返回与具有图像的全局post对象关联的所有术语。

我在考虑建模get_the_terms() 函数之后get_terms() 具有内置图像文件缓存的函数。但我有点担心在任何存档模板的循环中使用此函数时会发生什么。

基本上工作流是这样的:

获取所有图像/术语关联(0个查询)get_the_terms() (0个查询)get_posts() 通过include 参数在单视图(single.php、page.php等)中这样做很好,但是如果用户在归档视图的循环中使用此函数,会发生什么情况?您需要乘以3个查询(由get_posts()) 按每页帖子设置的值(默认WordPress安装中为10)。现在我们总共有30个查询。它变得有点丑陋快!尤其是如果用户希望显示来自多个分类的图像。每个帖子2个分类法将增加WordPress需要做的60个!

基本上有一些前进的道路,我想知道在这种情况下你会怎么做。

根本不构建功能。

构建该函数并告知用户,如果用户在存档视图中使用get\\u the\\u terms(),则应安装缓存插件。

构建函数+创建另一个函数,该函数将在加载存档模板之前缓存所有图像。这个过程将涉及如下内容:在$posts 已生成数组(但在加载模板之前),循环遍历数组中的所有帖子,为每个公共分类法每次迭代调用get\\u the\\u terms()。所有术语对象的输出将存储在一个新数组中。然后,我可以确定哪些图像与每个分类法的每个术语相关联,并将图像ID传递给get_posts() 一枪射中。这将允许缓存所有图像信息,以便在模板中使用3个查询,而不是30、60或90个查询。

IMHO 3似乎是一种合乎逻辑的方式,但我不确定它是否是一种反优化。

请让我知道你对此的想法!

1 个回复
最合适的回答,由SO网友:goldenapples 整理而成

我认为你的第三个选择是正确的。

顺便提一下,为什么要将自己的静态缓存滚入taxonomy_image_plugin_get_associations() 而不是使用内置WP_Cache API 为了这个?有什么原因吗wp_cache_get 不会在这里工作吗?似乎当人们确实打开了缓存插件时,使用WP对象缓存可以更好地进行优化。

结束