阻止发生搜索SQL

时间:2019-11-29 作者:jave.web

我需要阻止一些访问以搜索结果,而不是整个页面,只是结果。

问题是,我需要搜索SQL查询根本不发生。(我可以很容易地有条件地隐藏输出循环模板,我只是不确定SQL没有发生)。

我应该在哪里阻止这样的事情(我假设我找不到合适的过滤器/动作挂钩)?

EDIT: 请注意,页面需要加载和显示,否则我将继续使用请求阻止方法,如template_redirect

1 个回复
最合适的回答,由SO网友:birgire 整理而成

可以避免在中执行SQLWP_Query 使用posts_pre_query 滤器

例如,插件使用它将默认搜索外包给第三方搜索引擎。

下面是一个示例,我们可以使用空posts数组覆盖前端的主搜索查询,并避免运行SQL搜索查询:

add_filter( \'posts_pre_query\', function( $posts, \\WP_Query $query ){
    if( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
        return array();
    }
    return $posts;
}, 10, 2 );
由于我们返回的是一个空数组,我认为我们不需要调整$query->found_posts$query->max_num_pages 因为它们默认为零。