WordPressのタクソノミー一覧ページでは、通常、1つのタームに属する記事のみが表示されます。しかし、複数のカテゴリに属する記事がある場合は、それらをすべて表示したい場合もあるでしょう。
そこで、ここでは、WordPressのタクソノミー一覧ページを複数カテゴリに属する記事に対応させるための方法を紹介します。
URLからタームを動的に取得する
最も簡単な方法は、URLからタームを動的に取得する方法です。この方法では、タームのスラッグをURLパラメータとして指定します。
例えば、以下のような URL でアクセスした場合、タームのスラッグが「ニュース」のタームを取得できます。
https://example.com/taxonomy/ニュース
この URL でアクセスした場合、以下のようなコードで「ニュース」タームに属する記事をすべて取得できます。
<?php
// URL からタクソノミー名を取得
$taxonomy_name = get_query_var('taxonomy');
// URL からタームスラッグを取得
$term_slug = get_query_var('term');
// タームを取得
$term = get_term_by('slug', $term_slug, $taxonomy_name);
// タームに基づいて投稿を取得
$args = array(
'post_type' => '投稿タイプ名',
'tax_query' => array(
array(
'taxonomy' => $taxonomy_name,
'field' => 'slug',
'terms' => array($term->slug),
),
),
);
// クエリを実行
$the_query = new WP_Query($args);
// 記事一覧をループ
if ($the_query->have_posts()) :
while ($the_query->have_posts()) : $the_query->the_post();
// 記事のタイトルを表示
echo the_title();
endwhile;
endif;
// クエリをリセット
wp_reset_query();
?>
カスタムクエリを使用する
もう1つの方法は、カスタムクエリを使用する方法です。この方法では、tax_query 配列の relation キーを OR に設定することで、複数のタームに属する記事も取得できるようになります。
例えば、以下のようなコードで、ニュースとスポーツの両方に属する記事をすべて取得できます。
<?php
// カスタムタクソノミー名を取得
$taxonomy_name = 'ニュース';
// 投稿タイプを指定
$post_type = '投稿タイプ名';
// クエリを設定
$args = array(
'post_type' => $post_type,
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => $taxonomy_name,
'field' => 'slug',
'terms' => array('ニュース'),
),
array(
'taxonomy' => $taxonomy_name,
'field' => 'slug',
'terms' => array('スポーツ'),
),
),
);
// クエリを実行
$the_query = new WP_Query($args);
// 記事一覧をループ
if ($the_query->have_posts()) :
while ($the_query->have_posts()) : $the_query->the_post();
// 記事のタイトルを表示
echo the_title();
endwhile;
endif;
// クエリをリセット
wp_reset_query();
?>
このコードでは、まずカスタムタクソノミー名と投稿タイプを指定します。次に、tax_query 配列の relation キーを OR に設定します。tax_query 配列に、複数のタームを指定します。
クエリを実行して、記事一覧をループします。ループ内では、記事のタイトルを表示します。
この方法は特定のタームに属する記事を取得したい場合には便利です。
まとめ
以上、WordPressのタクソノミー一覧ページを複数カテゴリに属する記事に対応させるための方法を紹介しました。
どちらの方法も、比較的簡単に実装できるため、ぜひ試してみてください。