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マーケティングなどのサービスをご紹介しています。