・ターム一覧ページを表示する方法は?
こんな疑問にお答えします。
WordPressのテーマ作成時、実績やお知らせなどのカスタム投稿タイプの中でタームを作成することがあるはず。
そのターム内の記事を一覧で表示したい場合ありますよね。
実はあるコードを使えば、簡単に表示可能です。
すぐにできるよ!
ということで、この記事では「WordPressでターム一覧ページを表示する方法」について解説していきます!
WordPressでターム一覧ページを表示する方法
目次
【解説】WordPressでターム一覧ページを表示する方法
ターム一覧ページを表示するために、下記を紹介しますね。
- ファイル名
- ループ処理をする
- アクセスする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で全部の記事取得する方法あとはカスタム投稿タイプの一覧ページにアクセスすれば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/カスタムタクソノミーのスラッグ名/タームのスラッグ名
ターム一覧ページを表示したい場合は覚えておこう!