WordPress 関連記事の表示方法

WordPress でプラグインを使わずに関連記事を表示する方法を紹介します。
例えば、記事の終わりに同じカテゴリに紐づく投稿一覧を表示したい時に便利な方法です。

  1. 指定するキーワードがタイトルや本文に含まれている記事を表示する方法
  2. 表示中の投稿と同じタームに分類されている関連記事を表示する方法

指定するキーワードがタイトルや本文に含まれている記事を表示する方法

指定するキーワードが、タイトルや本文に含まれている記事を表示する方法を紹介します。
例えば、カスタム投稿タイプ products の記事の中でキーワード「キーワード」が含まれる記事を、
ランダムに最大5件表示する場合は、次のコードをテンプレートに追加します。

<?php
$args = array(
'post_type' => 'products', // 投稿タイプのスラッグを指定
'post_status' => 'publish', // 公開済の投稿を指定
'posts_per_page' => 5, // 投稿件数の指定
'post__not_in' => array($post->ID), // 現在表示している投稿を除外
'orderby' => 'rand', // ランダム
's' => 'キーワード' // キーワードを指定
);
$the_query = new WP_Query($args); if($the_query->have_posts()):
?>
<ul>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<!-- 投稿が無い場合の処理 -->
<?php endif; ?>

キーワードを指定してソートする場合は、パラメーター s にキーワードを指定します。
現在表示しているページを除外する場合は、パラメーター post__not_in$post->ID (今表示している記事ID)を指定。
キーワードを複数指定する場合は、カンマ(,)やスペースでキーワードを指定します。

's' => 'キーワード1 キーワード2' // キーワードを指定

キーワードの完全一致を指定する場合は 'exact' => true, を指定します。デフォルト値はfalse。

'exact' => true

表示中の投稿と同じタームに分類されている関連記事を表示する方法

表示中の投稿と同じタームに分類されている関連記事を表示する方法を紹介します。
例えば、カスタム投稿タイプ products でタクソノミー products-cat の場合に、
同じタームに紐づく投稿を、表示中の投稿を除いてランダムに5件表示する場合は、次のコードを追加します。

<?php // 現在表示されている投稿と同じタームに分類された投稿を取得
$taxonomy_slug = 'product-categories'; // タクソノミーのスラッグを指定
$post_type_slug = 'products'; // 投稿タイプのスラッグを指定
$post_terms = wp_get_object_terms($post->ID, $taxonomy_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' => $post_terms[0] // タームの配列を指定
)
)
);
$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; ?>

投稿並び替え系プラグインを使用していると表示がランダムにならない場合があります、ご注意を。

まとめ

WordPress でプラグインを使わずに関連記事を表示する方法を紹介しました。