因为你不能使用set 更改所有查询变量。最简单的方法是设置\'s\' 到空字符串:
add_action( \'pre_get_posts\', function( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
$taxquery = array( ... );
$query->set( \'tax_query\', $taxquery );
$query->set(\'s\', \'\' );
}
});
这样,WordPress仍然会将请求视为搜索,因此
search.php 模板将用于显示结果,如果您调用
is_search() 结果将是
TRUE.
如果您希望WordPress不再考虑搜索请求,您还需要手动取消设置$query->query_vars[\'s\'] 和设置$query->is_search 若为false:
add_action( \'pre_get_posts\', function( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
$taxquery = array( ... );
$query->set( \'tax_query\', $taxquery );
$query->set(\'s\', \'\' );
unset( $query->query[\'s\'] );
$query->is_search = FALSE;
}
});
这样,WordPress将不再将该请求视为搜索,而是使用
index.php 作为模板。
如果要使用其他模板,例如。taxonomy.php 您需要使用\'template_include\' 过滤器:
add_action( \'pre_get_posts\', function( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
$taxquery = array( ... );
$query->set( \'tax_query\', $taxquery );
$query->set(\'s\', \'\' );
unset( $query->query[\'s\'] );
$query->is_search = FALSE;
add_filter( \'template_include\', function() {
return locate_template( \'taxonomy.php\' )
}, 0 );
}
});