根据用户Otto, 谁提供a good explanatory answer 到a similar question, 您可以多次安全地调用wp\\u get\\u post\\u terms(),因为Wordpress的内部查询缓存系统在循环开始之前已启动,后续对wp\\u get\\u post\\u terms()的调用将命中缓存而不是查询:
对于标准WP\\U查询(和主查询),Post meta信息会自动缓存在内存中,除非您使用update\\u Post\\u meta\\u cache参数明确告诉它不要这样做。
因此,您不应该为此编写自己的查询。
元缓存如何用于普通查询:
如果WP\\u查询的update\\u post\\u meta\\u cache参数未设置为false,则从DB检索帖子后,将调用update\\u post\\u caches函数,该函数将调用update\\u postmeta\\u cache。
update\\u postmeta\\u cache函数是update\\u meta\\u cache的包装器,它本质上调用了一个简单的SELECT,其中包含检索到的所有帖子的ID。这将使它获得查询中所有帖子的所有postmeta,并将该数据保存在对象缓存中(使用wp\\u cache\\u add)。
然而,他的解释并没有提供太多的代码来证明它,也没有提供任何实际的页面查询分析。所以,为了确定,我点燃了Query Monitor plugin 并在我自己的归档页面上运行了一些测试。这表明我调用wp\\u get\\u object\\u terms()(总是由wp\\u get\\u post\\u terms()和实际的查询调用方激发)85次,这似乎是一个很高的数字。然而,每次通话大约需要0.0005秒。所有人都说总时间约为0.05秒。我对页面上所有400-500个查询的总查询时间(我使用的是有点臃肿的Themify杂志主题)是0.36秒。
所以我想教训是(假设我臃肿的主题没有做像中断WP的内部缓存这样疯狂的事情):由WP\\u get\\u post\\u terms()运行的简单查询是如此无足轻重,以至于如果只启动几次,它们的性能几乎没有下降。然而,如果您渴望优化,Wordpress似乎没有像用户Otto所指出的那样预先为这些数据启动任何缓存。