時給単価UP【3大特典付き】
コーディングテクニック集100選⋙

【解説】WordPressでターム一覧ページを表示する方法

記事内に広告を含みます

パソ君
パソ君

・ターム一覧ページを表示する方法は?

こんな疑問にお答えします。

WordPressのテーマ作成時、実績やお知らせなどのカスタム投稿タイプの中でタームを作成することがあるはず。

そのターム内の記事を一覧で表示したい場合ありますよね。

実はあるコードを使えば、簡単に表示可能です。

ジト
ジト

すぐにできるよ!

ということで、この記事では「WordPressでターム一覧ページを表示する方法」について解説していきます!

この記事でわかること

WordPressでターム一覧ページを表示する方法

【解説】WordPressでターム一覧ページを表示する方法

ターム一覧ページを表示するために、下記を紹介しますね。

  1. ファイル名
  2. ループ処理をする
  3. アクセスするURL名

順に見ていきましょう!

➀:ファイル名

まずファイル名。

ターム一覧ページを表示するファイルとしては下記になります。

  • taxonomy-タクソノミースラッグ.php
  • taxonomy-タクソノミースラッグ-タームスラッグ.php

他にもありますが、特定のターム一覧ページに対してファイルを分けたい場合は、スラッグを用いります。

といってもターム一覧ページを作る場合、だいたいそれぞれが同じデザインかと。もちろん案件にもよります。

タームのファイル例

今回は例として
「work」という投稿タイプで
「work_cat」というカスタムタクソノミーを作成して、

・LP
・HP
・Coding

というタームを作成したとしますね。

その場合、例としては下記ファイルを用意します。

  • デザインがそれぞれ同じの場合
    taxonomy-work_cat.php
  • デザインがそれぞれ異なる場合
    taxonomy-work_cat-lp.php
    taxonomy-work_cat-hp.php
    taxonomy-work_cat-coding.php

ループ処理をする

次にループ処理を使って、実際に記事を表示していきます。

記事数が違う場合やページネーションを使うなどは、案件ごとにカスタマイズしてくださいね。

メインループを使う場合

まず通常のメインループを記述。

<?php if ( have_posts() ) : ?>
  <?php while(have_posts()): the_post(); ?>
    <!-- 処理内容 -->
  <?php endwhile; ?>
<?php endif; ?>

あとはタームそれぞれの表示件数を下記で変えていきます↓

タームそれぞれ一緒の表示件数にする場合↓

function change_terms_per_page($query) {
  if ( is_admin() || ! $query->is_main_query() )
    return;
  if ( $query->is_tax('カスタムタクソノミーのスラッグ') ) {
    $query->set( 'posts_per_page', '-1' );
    return;
  }
}
add_action( 'pre_get_posts', 'change_terms_per_page' );

指定のタームだけ同じ表示件数にする場合↓

function change_terms_per_page($query) {
  if ( is_admin() || ! $query->is_main_query() )
    return;
  if ( $query->is_tax('カスタムタクソノミーのスラッグ') ) {
    $term_slug = $query->queried_object->slug;
    if ( $term_slug == 'タームのスラッグ' || $term_slug == 'タームのスラッグ' || $term_slug == 'タームのスラッグ' ) {
      $query->set( 'posts_per_page', 5 );
    } else {
      $query->set( 'posts_per_page', 10 );
    }
    return;
  }
}
add_action( 'pre_get_posts', 'change_terms_per_page' );

指定タームそれぞれ表示件数が違う場合↓

function change_terms_per_page($query) {
  if ( is_admin() || ! $query->is_main_query() )
    return;
  if ( $query->is_tax('カスタムタクソノミーのスラッグ') ) {
    $term_slug = get_queried_object()->slug;
    if ( $term_slug === 'タームのスラッグ' ) {
      $query->set( 'posts_per_page', '10' );
    } elseif ( $term_slug === 'タームのスラッグ' ) {
      $query->set( 'posts_per_page', '15' );
    } elseif ( $term_slug === 'タームのスラッグ' ) {
      $query->set( 'posts_per_page', '20' );
    } else {
      $query->set( 'posts_per_page', '5' ); // ターム以外の場合は5件表示
    }
  }
}
add_action( 'pre_get_posts', 'change_terms_per_page' );

functions.phpにてアクションフックを使用して、ループ処理します。

is_tax部分に、カスタムタクソノミーのスラッグを記述。

あとはターム事に表示件数を変えるのかをif文で指定しましょう。

メイルループを使う理由などの詳細は下記に↓

【簡単】カスタム投稿タイプ別にアーカイブ表示件数を指定【WordPress】

サブループを使う場合

<?php
// 現在表示しているタームのスラッグを取得する
$term_slug = get_queried_object()->slug;

// タームに関連付けられたカスタム投稿タイプの記事を取得する
$args = array(
  'post_type' => 'work',
  'posts_per_page' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'work_cat',
      'field' => 'slug',
      'terms' => $term_slug,
    ),
  ),
);
$the_query = new WP_Query($args);
?>

<?php if ($the_query->have_posts()): ?>
  <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <!-- 処理内容 -->
  <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>

$term_slugにて現在ページのタームスラッグを取得。
そしてそのタームスラッグ名の記事を一覧で表示する形になります。

この場合、タームのスラッグ名が変わっても書き換える必要がないので、保守性が高くなるのが良い点ですね。

ちなみに表示件数を-1にすることで全部の記事を表示することができますよ。

【解決】WordPressのWP_queryで全部の記事取得する方法

➂:アクセスするURL名

あとはカスタム投稿タイプの一覧ページにアクセスすればOK。

アクセスするURLは下記になります。

https://example.com/カスタムタクソノミーのスラッグ名/タームのスラッグ名

今回の例としてはこちら↓

https://example.com/work_cat/lp/
https://example.com/work_cat/hp/
https://example.com/work_cat/coding/

これでカスタムタクソノミーのターム一覧ページそれぞれにアクセスでき、表示することができました!

【解説】WordPressでターム一覧ページを表示する方法:まとめ

  • taxonomy-タクソノミースラッグ.php
    taxonomy-タクソノミースラッグ-タームスラッグ.php
  • サブループを使う場合$term_slugにて現在ページのタームスラッグを取得。
    そしてそのタームスラッグ名の記事を一覧で表示する
  • https://example.com/カスタムタクソノミーのスラッグ名/タームのスラッグ名
ジト
ジト

ターム一覧ページを表示したい場合は覚えておこう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA