複数のタクソノミーを指定して記事一覧を表示

2024.12.12.

WordPress

投稿

X Facebook Pocket LINE はてブ

株式会社TREVOの月額制ホームページ制作サービス
PR

この投稿では、WordPressで複数のタクソノミーを用いて記事一覧を絞り込む方法を紹介します。
特定の投稿タイプに複数のタクソノミーが関連付けられている場合、タクソノミークエリ(tax_query)を利用して、複数の条件(タクソノミーやターム)を「AND」または「OR」で組み合わせて投稿を取得できます。

以下は、3つ以上のタクソノミーを指定している投稿タイプの中から、上位2つが同一のタクソノミーに属する記事一覧を取得する例です。
単純に特定のタームに属する投稿を取得する方法はドキュメント等で見つかりますが、タクソノミーごとに条件を設定する例があまり見当たらなかったため、ここで紹介します。

※もっとスマートな書き方も可能ですが、汎用性を考えてこの形で紹介しています。

タクソノミーを二つ指定

「〇〇〇」はタクソノミー名1
「●●●」はタクソノミー名2

$term_varを追加することで、3つ、4つとタクソノミーを増やすことも可能です。その場合は、get_the_terms()を増やして配列に追加していきます。

パラメータ解説

  • posts_per_page:表示件数
  • post_type:投稿タイプ(postに限らず、カスタム投稿タイプのスラッグも指定可能)
  • relationANDはすべての条件を満たす投稿、ORはどれかの条件を満たす投稿を返す
<?php
$term_var  = get_the_terms( $post->ID, '〇〇〇' );
$term_var2 = get_the_terms( $post->ID, '●●●' );

// ターム情報が取得できているかチェック(エラー回避のため推奨)
if ( !$term_var || !$term_var2 ) {
    return; // タームが取得できなければ処理しない
}

$param = array(
    'posts_per_page' => 4,
    'post_type'      => 'post',
    'paged'          => $paged,
    'post__not_in'   => array( get_the_ID() ), // 現在の記事を除外
    'tax_query'      => array(
        'relation' => 'AND',
        array(
            'taxonomy' => '〇〇〇',
            'field'    => 'slug',
            'terms'    => $term_var[0]->slug
        ),
        array(
            'taxonomy' => '●●●',
            'field'    => 'slug',
            'terms'    => $term_var2[0]->slug
        ),
    ),
);

$postQuery = new WP_Query( $param );
?>

<?php if ( $postQuery->have_posts() ) : ?>
    <ul>
        <?php while ( $postQuery->have_posts() ) : $postQuery->the_post(); ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endwhile; ?>
    </ul>
<?php else : ?>
    <p>該当する記事がありません。</p>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

タクソノミーを一つ指定してタームを一つ指定

  • 〇〇〇:タクソノミー名1
  • ●●●:タクソノミー名2
  • ■■■:特定のターム名(スラッグ)
<?php
$term_var = get_the_terms( $post->ID, '〇〇〇' );

if ( !$term_var ) {
    return;
}

$param = array(
    'posts_per_page' => 4,
    'post_type'      => 'post',
    'paged'          => $paged,
    'post__not_in'   => array( get_the_ID() ),
    'tax_query'      => array(
        'relation' => 'AND',
        array(
            'taxonomy' => '〇〇〇',
            'field'    => 'slug',
            'terms'    => $term_var[0]->slug
        ),
        array(
            'taxonomy' => '●●●',
            'field'    => 'slug',
            'terms'    => '■■■'
        ),
    ),
);

$postQuery = new WP_Query( $param );
?>

<?php if ( $postQuery->have_posts() ) : ?>
    <ul>
        <?php while ( $postQuery->have_posts() ) : $postQuery->the_post(); ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endwhile; ?>
    </ul>
<?php else : ?>
    <p>該当する記事がありません。</p>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

他の使用パターン

3つ以上のタクソノミー指定

$term_var3 = get_the_terms( $post->ID, '△△△' ); を増やし、tax_queryに新たな配列要素を追加するだけで対応可能です。

「OR」条件の使用

relationORにすることで、いずれかのタクソノミー条件に合致する記事を取得できます。

特定のタームを手動で指定

タクソノミー1のタームは投稿から取得し、タクソノミー2は固定で特定のタームを指定するなど、柔軟に組み合わせることも可能です。

おすすめ記事

WordPressの更新に便利なAdvanced Custom Fieldsのフィールド一覧 35タイプ

X Facebook Pocket LINE はてブ

関連の記事

お問い合わせ
CONTACT

ホームページ制作に関することなら
お気軽にご相談ください

お電話でのお問い合わせはこちら

0120-838-567

平日9:00~18:00まで 定休日:土 日 祝