Setup
我有一个古腾堡区块(由ACF制成),它允许用户定义某些条件(例如,这个标签或这个日期和一个数字),以显示符合这些条件的帖子。E、 g.:“引用”;显示最新的5篇帖子”;或“或”;在6月1日至6月20日期间显示带有“car”标签的帖子;。用户可以创建任意数量的这些块,然后我将这些条件解析为WP\\u查询并输出帖子。
Problem
然而,在这样的设置中,一篇或多篇文章可能会被多次显示,尤其是在使用了大量这些块的情况下。例如,它可能是:;5最新“;以及上述贴子,标签为;“汽车”;有3篇完全相同的帖子。我想避免在一个页面上显示相同的帖子。
"Solution 1": post__not_in + transient or option
现在这没有问题了,如果我在第一次查询之后的每个WP\\U查询中使用post\\u not\\u in,将WP\\U查询返回的ID保存到一个瞬态或选项中,但这不仅感觉不正确,而且无法扩展。有很多帖子,可以在一个页面上以不同的条件显示,性能是一个问题
post__not_in seems to be a no go, 如果涉及到性能。
"Solution 2": post__not_in + cached results
当然,总是可以选择在任何情况下使用post\\uu not\\u,将所有查询的所有ID推送到某个自定义对象中,将其保存到一个临时对象中,并在后续调用中使用此ID,但在这里,我也觉得这就像是在使用一种方法来解决一个有更好方法的问题,而我没有看到更好的方法。(还有皮蒂,当过渡期到期时,灵魂会调用页面。)
Question
有人能帮忙吗?(不需要代码,尽管它通常很有帮助;我只是对这样做/解决这个问题的方法感兴趣。)
最合适的回答,由SO网友:Mark Kaplun 整理而成
我看传球没有问题post__not_in
到查询。是的,它看起来可能不是一个聪明的代码,但有时实现某些功能的唯一方法是使用丑陋的代码。
关于VIP页面。。。这是一个meh,一个特定的边缘案例,可能不适合您的情况(您是否正在制作一个在每个页面上都会显示的小部件?)即使核心wordpress缓存不能很好地处理这个问题,您也可以(而且可能应该!)围绕这些查询实现缓存。无论如何,由于您可能需要处理多个查询,因此不清楚VIP文章中建议的解决方案的适用性。要实现这样的解决方案(在PHP端过滤帖子),您必须准备好在每个查询中查询所有查询中的帖子总数,这将带来其自身的性能损失。
PSI会再次询问帖子是否需要真正独特,如果不是,会造成什么危害,增加的代码复杂性是否真的有任何有用的用途。