[WordPress] カスタム投稿タイプのタームごとに一覧・詳細ページのテンプレートファイルを分ける方法
前提
カスタム投稿タイプ、カスタムタクソノミー、タームを既に作成していることを前提とし、
各スラッグ名は以下を例題とします。
・投稿タイプスラッグ名 :news
・タクソノミースラッグ名:article
・タームスラッグ名 :news、press
【参考】
・カスタム投稿タイプの作成方法はこちら
・カスタム投稿タイプ、カスタムタクソノミー、タームについての記事はこちら
をご覧ください。
ターム別 一覧ページ
ターム別一覧ページのテンプレートファイルを作成します。
taxonomy-タクソノミースラッグ名-タームスラッグ名.php で作成します。
・タームスラッグが「news」の一覧ページ
taxonomy-article-news.php
・タームスラッグが「press」の一覧ページ
taxonomy-article-press.php
taxonomy-article-news.php 内容例
1 2 3 4 5 6 7 8 9 10 11 12 |
<h1>News 一覧</h1> <ul> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <li> <a href="<?php the_permalink() ?>"> <h2><?php the_title(); ?> </a> </li> <?php endwhile; else : ?> <p>記事がありません</p> <?php endif; ?> </ul> |
ターム別 詳細ページ
single.php にタームごとにテンプレートを分ける記述を記載します。
single.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $terms = get_the_terms( $post->ID, 'article' ); // カスタムタクソノミーのスラッグを指定 if ( $terms && ! is_wp_error( $terms ) ) { foreach ( $terms as $term ) { if ( 'news' === $term->slug ) { // カスタムタクソノミー「article」のタームが「news」の場合の表示 get_template_part( 'single-news', 'news' ); break; } elseif ( 'press' === $term->slug ) { // カスタムタクソノミー「article」のタームが「press」の場合の表示 get_template_part( 'single-news', 'press' ); break; } } } else { // デフォルトの表示(もしカスタムタクソノミーが設定されていない場合など) get_template_part( 'single-news', 'default' ); } ?> |
各テンプレートをファイルを作成する
・タームスラッグが「news」の詳細ページ
single-news-news.php の内容例
1 2 3 4 5 6 7 8 9 10 11 12 |
<h1>News</h1> <div> <?php while ( have_posts() ) : the_post(); ?> <h2><?php the_title(); ?></h2> <time datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y.m.d'); ?></time> <div class="post_wrap"> <?php the_content(); ?> <?php endwhile; ?> </div> <div class="btn"><a href="<?php echo esc_url( home_url( '/article/news/' ) ); ?>">News一覧</a></div> </div> |
・タームスラッグが「press」の詳細ページ
single-news-press.php
・それ以外の詳細ページ
single-news-default.php