I’m not 100% clear on what the problem is, but I would start with putting the conditions inside the function instead of wrapping the entire function.
add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
if (!is_admin()){
global $oswcPostTypes;
if(empty( get_query_var('suppress_filters' ) ) {
$post_type = get_query_var('post_type');
//get theme options
global $oswc_reviews;
if($post_type ) {
$post_type = $post_type;
set_query_var('post_type',$post_type);
return $query;
} elseif(!is_page() && !is_preview() && !is_attachment() && !is_search() ) {
$post_type = array('post');
foreach($oswcPostTypes->postTypes as $postType){
array_push($post_type, $postType->id);
}
set_query_var('post_type',$post_type);
return $query;
}
}
}
}