大阪のホームページ制作会社 株式会社TREVO
技術ブログ

複数のタクソノミーで関連記事一覧を取得する方法

2024.12.24.

WordPress

twitter Facebook Pocket LINE はてブ

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

WordPressの投稿やカスタム投稿タイプで、関連する記事を表示させる方法を解説します。
この手法は、同じカテゴリやタクソノミーに属する記事を取得し、記事一覧として出力する場合に役立ちます。

基本: 同じタクソノミーに属する関連記事を表示

WordPress覚書 その3 「特定のタクソノミーに属するタームの取得と記事一覧の出力とか」を参考にしました。

○○○○:取得したいタームのあるタクソノミー
△:表示したい件数
□□□□:投稿タイプ(カスタム投稿タイプ)post等

<?php
$term_var = get_the_terms($post->ID, '○○○○'); // タクソノミーの取得
$postQuery = new WP_Query();
$param = array(
    'posts_per_page' => '△', // 表示件数
    'post_type' => '□□□□', // 投稿タイプ
    'paged' => $paged, // ページ番号
    'post__not_in' => array(get_the_ID()), // 現在の投稿を除外
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => '○○○○',
            'field' => 'slug',
            'terms' => $term_var[0] // 取得したタクソノミーを指定
        )
    )
);
$postQuery->query($param);
?>
<?php if ($postQuery->have_posts()) : ?>
    関連記事一覧<br>
    <?php while ($postQuery->have_posts()) : $postQuery->the_post(); ?>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br>
    <?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

複数タクソノミーで関連記事を取得

複数のタクソノミーに属する記事を取得する場合、tax_query に追加する形でタクソノミーを指定できます。

relationの設定

AND:すべてに該当する投稿を取得する
OR:いずれかに該当する投稿を取得する

○○○○:1つ目の取得したいタームのあるタクソノミー
●●●●:2つ目の取得したいタームのあるタクソノミー
△:表示したい件数
□□□□:投稿タイプ(カスタム投稿タイプ)post等

<?php
$term_var = get_the_terms($post->ID, '○○○○'); // タクソノミー1
$term_var2 = get_the_terms($post->ID, '●●●●'); // タクソノミー2
$postQuery = new WP_Query();
$param = array(
    'posts_per_page' => '△',
    'post_type' => '□□□□',
    'paged' => $paged,
    'post__not_in' => array(get_the_ID()),
    'tax_query' => array(
        'relation' => 'AND', // 両方の条件を満たす投稿を取得
        array(
            'taxonomy' => '○○○○',
            'field' => 'slug',
            'terms' => $term_var[0]
        ),
        array(
            'taxonomy' => '●●●●',
            'field' => 'slug',
            'terms' => $term_var2[0]
        )
    )
);
$postQuery->query($param);
?>
<?php if ($postQuery->have_posts()) : ?>
    関連記事一覧<br>
    <?php while ($postQuery->have_posts()) : $postQuery->the_post(); ?>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br>
    <?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

タームを指定して関連記事を取得

relationの設定

AND:すべてに該当する投稿を取得する
OR:いずれかに該当する投稿を取得する

○○○○:1つ目の取得したいタームのあるタクソノミー
●●●●:2つ目の取得したいタームのあるタクソノミー
▼▼▼▼:2つ目の取得したいターム
△:表示したい件数
□□□□:投稿タイプ(カスタム投稿タイプ)post等

<?php
$taxonomy_slug = '○○○○'; // タクソノミー1
$post_type_slug = '□□□□'; // 投稿タイプ
$post_terms = wp_get_object_terms($post->ID, $taxonomy_slug); // 現在の投稿のタクソノミーを取得

if ($post_terms && !is_wp_error($post_terms)) {
    $terms_slug = array();
    foreach ($post_terms as $value) {
        $terms_slug[] = $value->slug;
    }
}

$args = array(
    'post_type' => $post_type_slug,
    'posts_per_page' => △,
    'orderby' => 'rand', // ランダムで取得
    'post__not_in' => array($post->ID),
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => $taxonomy_slug,
            'field' => 'slug',
            'terms' => $terms_slug // 現在の投稿と同じタクソノミー
        ),
        array(
            'taxonomy' => '●●●●', // 別のタクソノミーを指定
            'field' => 'slug',
            'terms' => '▼▼▼▼' // 特定のタームを指定
        )
    )
);

$the_query = new WP_Query($args);

if ($the_query->have_posts()) : ?>
    関連記事<br>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br>
    <?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

relation の設定

relation には以下の2つがあります。

AND: すべての条件を満たす投稿を取得。
OR: いずれかの条件を満たす投稿を取得。

注意点

get_the_terms の使用

get_the_terms はタクソノミーを取得する関数ですが、取得結果が配列で返されるため、適切に扱う必要があります。

wp_reset_postdata の使用

カスタムクエリを使用した後は、必ず wp_reset_postdata() を使用して、グローバルクエリをリセットしてください。

投稿タイプの確認

post やカスタム投稿タイプなど、対象となる投稿タイプを正しく指定します。

大阪のホームページ制作会社TREVOでは、ホームページ制作に関する情報を掲載しています。最短2日で仮サイトを公開するサービスやSEO対策に特化したホームページ制作、オリジナルホームページデザイン、ライティング、リスティング広告、WEBマーケティングなどのサービスをご紹介しています。

板浪雅樹 のアバター

経歴: 映像制作の専門学校を卒業後、映像制作(編集・撮影)でのアシスタント、カーナビゲーション用の3DCG制作、PS2用の3DCGゲーム背景制作、16ミリフィルムのデジタル変換業務等を経てWEB制作部門のある会社に就職。株式会社TREVOでディレクション、SEO対策、CMS開発、3DCG制作、映像制作を担当

twitter Facebook Pocket LINE はてブ
WEB無料相談