if( $example->have_posts() )
失败。像'force_no_results' => true
这样的WP_Query会强制其不返回任何结果?#1 楼
尝试'post__in' => array(0)
简单明了。
评论
我的第一个想法是–一定在某处出错,但是从略读相关代码后,这实际上应该可以很好地工作。 :)
–稀有
2014年4月9日在14:48
零非常重要,因为只有一个空数组会返回最近的帖子。
–马克·卡普伦
17年2月7日在15:01
谢谢!这为我解决了一个错误,因为post__in在传递空数组时返回帖子... array(0)很棒!这很奇怪,但实际上可以追溯到WP核心中作为一个错误出现的问题,但后来被保留下来,因为有太多主题/插件开发人员围绕它构建了功能-_- core.trac.wordpress.org/机票/ 28099
–EranSch
17 Mar 29 '17 at 15:19
#2 楼
奇怪的是,没有干净/明确的方法可以使WP_Query
短路。 但是对于
WP->parse_request()
本身来说,通常是肮脏的骇客,例如通过通过do_parse_request
过滤器添加WP_Query
来短路SQL查询等。评论
谢谢(你的)信息。顺便说一句,这是一个次要循环。我最终做了一个肮脏的hack,例如“ post_type” =>“ break_loop”,这是一个不存在的帖子类型。
–某处某人
2014年4月9日下午0:59
#3 楼
将查询参数设置为不存在的值时遇到的问题是2:查询将运行,因此即使您已经知道没有结果,也要付出一点性能代价。
WordPress查询具有对查询起作用的19个不同的
'posts_*'
过滤器挂钩('posts_where'
,'post_join'
等),因此您永远无法确定即使设置了不存在的参数查询也不返回结果,过滤器返回的简单OR
子句返回某些内容。您需要一些硬性例程来确保查询不返回任何结果,并且不会(或非常小)性能问题。
触发该例程,您可以使用每种方法,从技术上讲,您可以将任何参数传递给
WP_Query
,即不存在的事件参数。 > $a = new WP_Query( array( 's' => 'foo', 'force_no_results' => true ) );
并添加在
'force_no_results' => true
上运行的回调以完成艰苦的工作:在'pre_get_posts'
上尽可能晚。如果查询中存在参数'force_no_results',则:首先删除所有可能干扰查询的过滤器,然后将其存储在帮助器数组中
确保触发了过滤器,添加一个返回此类请求的过滤器:
'pre_get_posts'
一旦删除所有过滤器,此查询就不可能更改并且非常快速,并且肯定没有结果。查询已运行,所有原始筛选器(如果有的话)将还原,所有后续查询将按预期工作。
评论
IT似乎是在要求已经确定的实现,而不是在问如何解决根本问题。阅读这句话,我认为您真正应该问的是:如何使特定的搜索模式不可查询?导致WP_Query()不返回结果的方法可能是,也可能不是回答该问题的最佳方法。如果您要描述想要不可查询的搜索模式,这也可能会有所帮助。了解搜索模式可能有助于找出解决方案。