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类型存档时,才会设置值。