pre_get_posts
为每个查询运行。其中包括主查询、辅助查询和菜单。问题是is_post_type_archive(array(\'provider\'))
正在检查主查询是否是post类型存档,而不是正在进行的特定查询pre_get_posts
.
因此,当您检查并修改当前查询时pre_get_posts
您将根据主查询的条件修改所有查询。
要正确执行所需操作,需要签入每个查询pre_get_posts
检查传递给操作回调的特定查询是否针对post类型存档。换言之,您正在使用相同的查询设置参数$query->set()
.
您可以使用$query->is_post_type_archive()
方法
add_action( \'pre_get_posts\', \'search_provider\');
function search_provider( $query ) {
if ( $query->is_post_type_archive( array( \'provider\' ) ) ) {
$query->set( \'posts_per_page\', -1 );
$query->set( \'orderby\', \'title\' );
$query->set( \'order\', \'ASC\' );
if ( isset( $_GET[\'providersearch\'] ) && $_GET[\'providersearch\'] == \'Y\' ) {
if ( ! empty( $_GET[\'s\'] ) ) {
$query->set( \'s\', $_GET[\'s\'] );
}
} else {
$query->set( \'exclude\', array( 10054, 10068 ) );
}
}
}
现在
$query->set()
仅当特定查询是post类型存档时,才会设置值。