今回はカスタムタクソノミーのタームごとに記事一覧を表示するページの作り方を紹介します。
ループ処理でタームを指定して特定のタームの記事一覧だけを表示するのではなく、アーカイブページなどで選択したタームの記事一覧を表示する方法です。
作成するファイルは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】カスタムタクソノミーのタームを一覧表示する方法