[WordPress]プラグイン無しでタグに関連付けられた関連記事を表示する方法

通常Wordpressの関連記事は、カテゴリに関連付ける方法が一般的です。

プラグイン無しでカテゴリに関連付けられた関連記事の表示方法は以前書きました。

Wordpress記事下などによくある関連記事をプラグインを使用しないで表示する方法です。 こんな感じで表示されます。 ...

通常は、これでも十分だと思います。けれど、Wordpressユーザーの中には、カテゴリを設定しないでタグで管理しているという方も結構おられるようです。

そんな場合は、カテゴリで関連記事を表示するよりは、タグで表示したほうが関連性の高い記事が表示されます。

ということで、今回は「タグに関連付けられた関連記事を表示する方法」です。

photo by Felix Stember

スポンサーリンク
レクタングル(大)広告

実装方法

その実装方法は、特にカテゴリのものと変わりありません。

まずは、詳しい方法が書かれているのでプラグインなしで関連記事を表示する方法を実装してください。

あとはその実装した方法のクエリー部分(データベースからデータを取得する部分)を変更するだけです。

related-entries.phpの編集

related-entries.php編集部分だけ説明します。

カテゴリに関連付ける場合

まず、カテゴリから関連記事を取得するクエリは以下のようになっています。

<?php
//カテゴリ情報から関連記事を10個ランダムに呼び出す
$categories = get_the_category($post->ID);
$category_ID = array();
foreach($categories as $category):
  array_push( $category_ID, $category -> cat_ID);
endforeach ;
$args = array(
  'post__not_in' => array($post -> ID),
  'posts_per_page'=> 10,
  'category__in' => $category_ID,
  'orderby' => 'rand',
);
$query = new WP_Query($args); ?>
  <?php if( $query -> have_posts() ): ?>
  <?php while (query -> have_posts()) : $query -> the_post(); ?>
    <!-- (略)関連記事の表示処理 -->
  <?php endwhile;?>
  
  <?php else:?>
  <p>記事はありませんでした</p>
  <?php
endif;
wp_reset_postdata();
?>
<br style="clear:both;">

タグに関連付ける場合

タグで関連記事を取得するには、上記の部分を以下のように変更します。

<?php 
//タグ情報から関連記事をランダムに呼び出す
$tags = wp_get_post_tags($post->ID);
$tag_ids = array();
foreach($tags as $tag):
  array_push( $tag_ids, $tag -> term_id);
endforeach ;
$args = array(
  'post__not_in' => array($post -> ID),
  'posts_per_page'=> 10,
  'tag__in' => $tag_ids,
  'orderby' => 'rand',
);
$query = new WP_Query($args); ?>
  <?php if( $query -> have_posts() && !empty($tag_ids) ): ?>
  <?php while ($query -> have_posts()) : $query -> the_post(); ?>
    <!-- (略)関連記事の表示処理 -->
  <?php endwhile;?>
  
  <?php else:?>
  <p>記事はありませんでした</p>
  <?php
endif;
wp_reset_postdata();
?>
<br style="clear:both;">

ここで気をつけなければいけないことがあります。通常、投稿にカテゴリは必ず附属します(設定しなくても「未分類」になる)が、タグは設定されていない投稿もあり得るということです。

その、タグが一つも設定されていない投稿があることを考えて以下のようになっています。

<?php if( $query -> have_posts() || !empty($tag_ids) ): ?>

タグがない場合は、$tag_idsが空になるので、空の場合は「<p>記事はありませんでした</p>」を表示するようにします。(そうしないと、新着投稿を10個表示するクエリ結果が返されるので。)

気をつけなければいけないと言ってもこれだけです。

その他の設定

関連記事の表示部分や、スタイル、アイキャッチの設定などは以下の記事と全く同じでOKです。

プラグインなしで関連記事を表示する方法

まとめ

今回、自作のテーマに「タグに関連付けられた関連記事」機能も付けてみたので、その方法について書いてみました。

ただ、Wordpressユーザーの大半はカテゴリーを設定していると思うので、わざわざ関連記事をタグに紐付けする必要はないかと思います。

『[WordPress]プラグイン無しでタグに関連付けられた関連記事を表示する方法』へのコメント

  1. 名前:名無しさん 投稿日:2015/01/07(水) 21:04:46 ID:dd9fd419b

    コード参考にさせていただいてます。
    have_posts() || !empty($tag_ids) ): ?>
    タグが一つもない時は ”||” じゃなくて ”&&” ですね。

  2. アバター画像 名前:わいひら 投稿日:2015/01/08(木) 14:34:47 ID:6e026be79

    ありがとうございます!
    修正しておきました。

    そういえば、自作で公開しているテーマでも同じ箇所の間違いを以前教えてもらったのに、こちらを修正するのを忘れていました;

  3. 名前:るなるな 投稿日:2015/02/15(日) 13:58:37 ID:88863b5bf

    タグで関連記事を表示させる方法が以前はあったのですが現在機能が終了し、いろいろ探してこちらにたどり着きました。
    こちらはWordPressではなくFC2ブログなのですが同じようにできないでしょうか?
    試しに上記のものを貼ってみましたが何も変わりませんでした。

  4. アバター画像 名前:わいひら 投稿日:2015/02/15(日) 16:49:42 ID:64780a16c

    FC2ブログでは、この方法は利用できません。
    FC2には、FC2の書き方があると思います。
    ただ、僕はFC2ブログを使ったことがないので、どのようなものを書いて良いのかは、ちょっとわからないです。