Решил вопрос так, файл темы search.php, основная часть кода:
if ( have_posts() ) {
$stack = [];
foreach($posts as $item) {
// складываем все типы постов результата поиска
array_push($stack, $item->post_type);
}
// находим уникальные типы постов
$result = array_unique($stack);
foreach ($result as $res) :
$args = array(
'post_type' => $res, // добавляем в запрос тип поста
'post_per_page' => -1,
's' => get_search_query(),
);
$query = new WP_Query($args);
// Вывод группы результатов поиска по типу поста
// Типа поста
echo get_post_type_object($res)->label;
// посты
while($query->have_posts()) : $query->the_post();
get_template_part( 'template-parts/content', 'search' );
endwhile; wp_reset_query();
endforeach;
} else {
// если нет результатов
get_template_part( 'template-parts/content', 'none' );
}