没有真正的方法“停止”主查询。有很多过滤器可以修改它,只是没有什么可以完全关闭它。你能做的最好的事情就是posts_request
, 它在命中数据之前激发,并返回一个空字符串或一些不敏感的内容。这仍然会影响数据库。
示例(未测试):
<?php
add_filter(\'posts_request\', \'wpse83187_posts_request\', 10, 2);
function wpse83187_posts_request($sql, $query)
{
if (!$query->is_main_query() /* other conditionals here! */) {
return;
}
return \'\';
}
而不是创建自己的
WP_Query
在模板中查找,为什么不使用
pre_get_posts
?
然后对至少一个WP\\U查询循环使用“main”循环。直到很久以后才发生数据库命中,所以唯一“浪费”的开销是WP填充查询变量。WP_Query
有一个名为init
这基本上重置了所有内容。调用它,然后设置所需的任何查询变量。那么你需要打电话parse_query
再次设置各种条件。
<?php
add_action(\'pre_get_posts\', \'wpse83187_reset_q\');
function wpse83187_reset_q($query)
{
if (!$query->is_main_query() /* other conditionals here! */) {
return;
}
$query->init();
// reset query vars here. eg:
$query->set(\'post_type\', \'product\');
// re-run validation and conditional set up.
$query->parse_query();
}