Если правильно понял, то сначала получаете только метки, для этого есть get_terms
Потом по результатам проходитесь циклом, получаете посты этой метки, для этого get_posts. Просто в параметры запроса передаете, что Вас интересуют посты с такой-то меткой.
Дальше выводите сами метки и еще один цикл по постам этой метки внутри цикла по меткам.
Схематически вот так:
$tags = get_terms(); // параметры смотрите в доке
foreach( $tags as $tag ):
$posts = get_posts([ // передаете $tag сюда согласно доке ])
?>
<h2> <?= $tag->name; ?> </h2>
<?php
foreach( $posts as $post ):
setup_postdata( $post );
?>
<article>
<h3> <?= the_title(); > </h3>
......
</article>
<?php
endforeach;
wp_reset_postdata;
endforeach;