减少/优化生成固定链接时wp_get_Object_Terms()的调用

时间:2015-05-09 作者:Josh

“我的主题”运行一个循环,不需要post术语来显示。然而,Wordpress core在每次迭代中都会运行wp\\u get\\u object\\u terms函数。

这会导致不必要的DB查询,例如:

SELECT t.*, tt.*
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON tt.term_id = t.term_id
INNER JOIN wp_term_relationships AS tr
ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.taxonomy IN (\'category\')
AND tr.object_id IN (81595)
ORDER BY t.name ASC
是否有办法防止/减少或优化仅在绝对必要时才调用wp\\u get\\u object\\u terms()?

我一直在跟踪它,以获取在循环中调用的\\u permalink()。我们的网站使用包含类别的永久链接,这解释了为什么它会为每个帖子搜索类别。有什么方法可以优化这一点吗?

1 个回复
SO网友:Rarst

由于您已经缩小了范围,因为您的帖子permalinks包括类别,所以WP正在尝试找出如何为每个帖子将它们放在一起。

对象缓存的主要方法是优化整体设置的效率,而不是对一代又一代的位和块进行微观管理。如果为站点设置持久对象缓存,则类别信息将透明地缓存在内存中,而不是每次都从数据库中检索。

短链接(Shortlinks)

如果这不是一个选项,或者您生成的链接的规模甚至会给对象缓存带来问题,那么有一个稍微有点黑的替代方案。虽然您启用了“漂亮”链接,但这并不意味着“不漂亮”链接停止工作。

您可以使用wp_get_shortlink() 函数生成后一种链接(/?p=id), 这将大大减少资源消耗。

它们在源代码中看起来并不好看,但当被访问时,WP会透明地将它们重定向到“漂亮”版本。当然,过多的重定向也不是一件好事,但这取决于你的权衡是否对你的环境有意义。

结束

相关推荐

使用自定义字段对GET_TERMS进行排序

我有一个“crb\\U issues”的自定义分类法,它有一个与之关联的自定义字段,即“issue\\U date”,它为每个术语输出一个日期值,看起来很像“20140601”yearmonthday。我正在尝试使用get\\u terms输出所有分类法术语,并按该自定义字段对它们进行排序。下面是我一直在编写的代码,它可以很好地输出术语名称和“issue\\u date”的值。但我很难通过自定义字段获得要排序的输出。$args = array( \'meta_key\'