こんにちは、ryohei(@ityryohei)です!

本記事ではWordPressのシングルページで関連記事をランダムに表示する方法をご紹介しています。

関連記事を表示するプラグインはたくさんあります。「WordPress Related Posts」や「YARPP」などですね。どちらも人気のプラグインで、利用者は多いのでネットに情報があるので導入しやすいかと思います。

ただ、WordPressでプラグインをインストールするとサイト全体の動作が重くなったり、本体のアップデートに伴いプラグインが使用できなくなるなど、デメリットもありますので、なるべくプラグインを使用せずに必要な機能を追加したいところですよね。

本記事では、プラグインを使わずに関連記事をランダムで表示する方法をご紹介しています。関連記事の機能を導入したいけれどプラグインは使用したくないという方、ぜひ参考にしていただければ幸いです。

では、解説していきます。

関連記事の表示部分を作成する

HTMLやCSSを作成→PHPでプログラム部分を組み込み、という流れでいきます。なのでWordPressのファイルを修正する前に、関連記事を表示する部分のデザインを作成しておきます。

例として私のサイトで関連記事として使用しているHTMLをご紹介します。

<a class="related-post" href="#">
  <img src="post-image.jpg" alt="">
  <h3>Post Title</h3>
</a>

imgタグにアイキャッチ画像を、h3に関連記事のタイトルを表示しています。

表示できる情報は多いですが、関連コンテンツの表示に合わせてシンプルな構造にしています。表示部分はいつでも修正できるので、形だけ作っておいて後程調整していただければと思います。

関連記事を出力する処理を追加する(single.phpを修正する)

では本題に戻りまして、関連記事をランダムに表示するPHPを作成していきます。色々と方法はあるかと思いますが、本記事では「WP_Query」を使用して関連記事を出力していきます。関連記事を表示したい場所に下記のサンプルを追記します。

処理内容についてはコメントを記載しておりますので、そちらをご参照いただければと思います!

single.php

<?php

//現在の投稿IDからカテゴリーを取得する
$categories = get_the_category($post->ID);

//カテゴリーIDを代入する配列を定義する
$category_id = array();

foreach($categories as $category):
    //現在の投稿が持っているカテゴリーIDを配列に格納
    array_push($category_id, $category->cat_ID);
endforeach ;

$args = array(
    'post__not_in' => array($post->ID),  //現在の投稿を関連記事から除外する
    'posts_per_page'=> 5,                //関連記事に表示する投稿するを指定
    'category__in' => $category_id,      //カテゴリーIDの配列を指定
    'orderby' => 'rand',                 //ソートをランダムに指定
);
$query = new WP_Query($args);

//ここから関連記事を出力するループ処理
//前項で作成したHTMLに組み込んでいきましょう!

if( $query->have_posts() ):
    while ($query->have_posts()) : $query->the_post();
        ?>

        <a class="related-post" href="<?php echo get_permalink(); ?>">
        
            <?php
            //アイキャッチ画像
            if ( has_post_thumbnail() ):
                //記事に設定されているアイキャッチ画像を表示
                the_post_thumbnail('thumbnail');

            else:
                //アイキャッチ画像がない場合に表示する画像
                echo 'No Image';
            endif;
            
            
            //記事タイトル ?>
            <h3><?php echo  get_the_title(); ?></h3>
            
            <?php
            //他に関連記事で使用できそうな項目
            //パーマリンク
            echo get_permalink();

            //タイトル
            echo get_the_title();

            //所属するカテゴリー名
            foreach($categories as $category):
                echo $category->name;
            endforeach;

            //投稿日
            echo get_the_date();

            //抜粋
            the_excerpt();
            
            ?>
        </a>
    <?php
    endwhile;
else:
    echo '記事はありませんでした';
endif;
wp_reset_postdata();

?>

上記のコードをsingle.phpの関連記事を表示したい部分に追加すると、同じカテゴリに属する記事がランダムで表示されます。表示項目をご自身のWebサイトに合わせて使用していただければと思います。

最後に

いかがでしたでしょうか。

WordPressで関連記事を表示する場合、真っ先にプラグインの使用を検討されるかと思いますが、出力方法によってはさほど手間をかけることなく実装するすることができますので、これを機に試していただければと思います。

以上、WordPressで、プラグインなしで関連記事をランダムに表示する方法のご紹介でした!