tax_queryでターム毎に分類してカスタム投稿記事一覧を表示する

タームごとに分類してカスタム投稿の記事一覧を表示する機能を実装する方法です。

まずタームごとsectionタグで分類し、記事一覧を表示させます。

2~3行目のみ、それぞれタクソノミーとカスタム投稿のスラッグに書き換えます。

<?php
    $taxonomy_name = 'tax_category'; // タクソノミーのスラッグ名を入れる
    $post_type = 'custom_post'; // カスタム投稿のスラッグ名を入れる
    $args = array(
        'orderby' => 'name',
        'hierarchical' => false
        );
    $taxonomys = get_terms( $taxonomy_name, $args);
 
    if(!is_wp_error($taxonomys) && count($taxonomys)):
        foreach($taxonomys as $taxonomy):
        $url = get_term_link($taxonomy->slug, $taxonomy_name);
        $tax_posts = get_posts( array(
            'post_type' => $post_type,
            'posts_per_page' => 5, // 表示させたい記事数
            'tax_query' => array(
                array(
                    'taxonomy' => $taxonomy_name,
                    'terms' => array( $taxonomy->slug ),
                    'field' => 'slug',
                    'include_children' => true,
                    'operator' => 'IN'
                    )
                )
            ));
            if( $tax_posts ) {
?>
    <section>
        <h3 id="<?php echo esc_html($taxonomy->slug); ?>"><a href="<?php echo $url; ?>"><?php echo esc_html($taxonomy->name); ?></a></h3>
        <ul>
            <?php foreach($tax_posts as $tax_post): ?>
            <li><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo get_the_title($tax_post->ID); ?></a></li>
            <?php endforeach; wp_reset_postdata(); ?>
        </ul>
    </section>
<?php
            }
        endforeach;
    endif;
?>