【WordPress】taxonomy.phpでタームごとの記事一覧ページを作る方法

【WordPress】taxonomy.phpでタームごとの記事一覧ページを作る方法 WordPress

今回はカスタムタクソノミーのタームごとに記事一覧を表示するページの作り方を紹介します。

ループ処理でタームを指定して特定のタームの記事一覧だけを表示するのではなく、アーカイブページなどで選択したタームの記事一覧を表示する方法です。

作成するファイルは1つで、表示される一覧記事のみタームごとに変更します。

 

スポンサーリンク

タームごとの記事一覧ページを作る方法

ファイルを作成する

タームの記事一覧を表示するファイルは

  • taxonomy-[slug].php
  • taxonomy.php

のどちらかになると思います(本当はもうちょっとあるけど大体この2つしか使いません)。

カスタムタクソノミーごとにファイルを分けたい場合は「taxonomy-[slug].php」、全てのカスタムタクソノミーで同じファイルを使いたい場合は「taxonomy.php」というファイルを作りましょう。

このファイルがタームの記事一覧を表示させるファイルになります。

 

ループ処理をする

カスタムタクソノミーのループはサブループを使いますが、query_posts()は使わないでください。メインループを上書きしてしまうので非推奨となっている関数です。

サブループはnew WP_Query()を使います。

 

タームごとに記事一覧を表示するコードは以下の通りです。

<?php
$term = wp_get_object_terms($post->ID, 'カスタムタクソノミー名');
$args = array( 
    'post_type' => 'カスタム投稿タイプ名',
    'taxonomy' => 'カスタムタクソノミー名',
    'term' => $term[0]->name,
    'posts_per_page' => 10,
);
$custom_query = new WP_Query( $args );
if ( $custom_query->have_posts() ) : 
    while ( $custom_query->have_posts() ) : 
        $custom_query->the_post(); 
?>

<!-- ここにループ処理 -->

<?php endwhile;
endif;
wp_reset_postdata();
?>

wp_get_object_terms():タームの情報を取得する関数。

第一引数:オブジェクトのID

第二引数:カスタムタクソノミー名

IDはWordPressのグローバル変数$postから取得できます。

 

重要なのが$argsにある'term' => 'term[0]->name'の部分ですね。

wp_get_object_terms()で取得したタームの情報からnameを取り出します。

これで'term'の値が動的に変わるので、アーカイブページなどから選択したタームの記事一覧が1つのファイルで表示できるようになります。

 

ちなみに'term'の値を特定のタームの名前にすると、常にそのタームの記事一覧が表示されるようになります。

 

まとめ

これ調べてもなかなか出てこなかったんですよね…笑

常に特定のタームの記事一覧を表示する方法ではなく、アーカイブページからカスタムタクソノミーのタームを選択した時、そのタームの記事一覧を表示する方法です。

「ターム一覧をリンクで表示し、リンク先にそのタームの記事一覧を表示する」という機能は割と必要になることが多いと思うので、参考にしてみてください。

 

カスタムタクソノミーのタームを一覧で表示する方法は以下の記事にまとめました。

【WordPress】カスタムタクソノミーのタームを一覧表示する方法
今回は特定のカスタムタクソノミーのタームを一覧にして表示する方法を紹介します。 ターム=カスタムタクソノミーに入ってる各々のカテゴリー...