WordPress 現在表示されている投稿と同じタームに分類された投稿を表示する方法

WordPress で現在表示されている投稿と同じタームに分類された投稿を表示する方法を紹介します。
例えば、プラグインを使わずに関連投稿を表示したい場合に便利な方法です。

現在表示されている投稿と同じタームに分類された投稿の表示方法

現在表示されている投稿と同じタームに分類された投稿の表示方法を紹介します。
次のコードは、タクソノミー product-categories で投稿タイプ products の場合の表示方法です。


<?php // 現在表示されている投稿と同じタームに分類された投稿を取得
$taxonomy_slug = 'product-categories'; // タクソノミーのスラッグを指定
$post_type_slug = 'products'; // 投稿タイプのスラッグを指定
$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' => 5, // 表示件数を指定
'orderby' => 'rand', // ランダムに投稿を取得
'post__not_in' => array($post->ID), // 現在の投稿を除外
'tax_query' => array( // タクソノミーパラメーターを使用
array(
'taxonomy' => $taxonomy_slug, // タームを取得タクソノミーを指定
'field' => 'slug', // スラッグに一致するタームを返す
'terms' => $terms_slug // タームの配列を指定
)
)
);
$the_query = new WP_Query($args); if($the_query->have_posts()):
?>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>

まずは、タクソノミーと投稿タイプを指定します。
タクソノミーの指定は $taxonomy_slug = 'product-categories’;product-categories を変更。
投稿タイプの指定は $post_type_slug = 'products';products を変更してください。

次に、現在表示している投稿に紐付いているターム情報を配列に格納します。
最後にサブループのクエリにタームの配列を指定しておしまいです。
表示件数などの条件は適宜調整を加えてください。
サブループの詳しい内容はWordPress 基本的なループの表示方法を紹介をご覧ください。

まとめ

WordPress で現在表示されている投稿と同じタームに分類された投稿を表示する方法を紹介しました。

スポンサーリンク

合わせて読みたい関連記事