因为你不能使用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 );
}
});