WordPressで関連投稿を表示する方法

ブログを運営していると、読者に関連する投稿を表示することが重要です。
これにより、読者は他の興味深い記事にもアクセスしやすくなり、
サイトの滞在時間が延びる可能性があります。
この記事では、特定のカテゴリに属する関連投稿を表示する方法について説明します。

必要な準備

まず、WordPressのテーマの適切なテンプレートファイルに以下のコードを追加します。
通常は、single.phpcontent-single.php に追加するのが一般的です。

$orig_post = $post;
global $post;
$categories = get_the_category($post->ID);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) {
$category_ids[] = $individual_category->term_id;
}
$args = array(
'category__in' => $category_ids, // 表示する投稿のカテゴリIDを指定します
'post__not_in' => array($post->ID), // 現在の投稿を除外します
'posts_per_page'=> 2, // 表示する関連投稿の数を2件に設定します
'ignore_sticky_posts'=>1 // 固定表示されている投稿を無視します
);
$my_query = new wp_query($args);
if ($my_query->have_posts()) {
echo '<div id="related_posts"><h3>Related Posts</h3><ul>';
while ($my_query->have_posts()) {
$my_query->the_post(); ?>
<li>
<div class="relatedthumb">
<a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>">
<?php the_post_thumbnail(); ?>
</a>
</div>
<div class="relatedcontent">
<h3>
<a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>">
<?php the_title(); ?>
</a>
</h3>
<?php the_time('M j, Y') ?>
</div>
</li>
<?php
}
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query();

コードの詳細説明

このコードでは、現在の投稿に関連するカテゴリを取得し、
そのカテゴリに属する他の投稿を表示します。
以下に、各パラメータについて詳しく説明します。

category__in

'category__in' => $category_ids

このパラメータは、取得する投稿が含まれるカテゴリIDの配列を指定します。
現在の投稿と同じカテゴリに属する他の投稿を取得します。

post__not_in

'post__not_in' => array($post->ID)

現在の投稿を結果から除外します。
これにより、現在表示している投稿が関連投稿として再度表示されることを防ぎます。

posts_per_page

'posts_per_page' => 2

表示する関連投稿の数を設定します。
この例では2件の関連投稿を表示しますが、必要に応じてこの数を変更することができます。

ignore_sticky_posts

'ignore_sticky_posts' => 1

固定表示されている投稿を結果から除外します。
WordPressでは特定の投稿を固定表示する機能がありますが、
このオプションを設定すると、それらの投稿が関連投稿として表示されるのを防ぎます。

最終的な出力

このコードを実行すると、関連投稿が次のように表示されます。

<div id="related_posts">
<h3>Related Posts</h3>
<ul>
<li>
<div class="relatedthumb">
<a href="関連投稿のURL" rel="bookmark" title="関連投稿のタイトル">
<img src="サムネイル画像のURL" alt="関連投稿のタイトル">
</a>
</div>
<div class="relatedcontent">
<h3>
<a href="関連投稿のURL" rel="bookmark" title="関連投稿のタイトル">
関連投稿のタイトル
</a>
</h3>
<span>投稿日: 月 日, 年</span>
</div>
</li>
<!-- 他の関連投稿も同様に表示されます -->
</ul>
</div>

ランダムで表示したい場合

$orig_post = $post;
global $post;
$categories = get_the_category($post->ID);
if ($categories) {
    $category_ids = array();
    foreach($categories as $individual_category) {
        $category_ids[] = $individual_category->term_id;
    }
    $args = array(
        'category__in' => $category_ids,  // 表示する投稿のカテゴリIDを指定します
        'post__not_in' => array($post->ID),  // 現在の投稿を除外します
        'posts_per_page'=> 2,  // 表示する関連投稿の数を2件に設定します
        'ignore_sticky_posts'=>1,  // 固定表示されている投稿を無視します
        'orderby' => 'rand'  // 関連投稿をランダムに表示します
    );
    $my_query = new wp_query($args);
    if ($my_query->have_posts()) {
        echo '<div id="related_posts"><h3>Related Posts</h3><ul>';
        while ($my_query->have_posts()) {
            $my_query->the_post(); ?>
            <li>
                <div class="relatedthumb">
                    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>">
                        <?php the_post_thumbnail(); ?>
                    </a>
                </div>
                <div class="relatedcontent">
                    <h3>
                        <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>">
                            <?php the_title(); ?>
                        </a>
                    </h3>
                    <?php the_time('M j, Y') ?>
                </div>
            </li>
            <?php
        }
        echo '</ul></div>';
    }
}
$post = $orig_post;
wp_reset_query();

関連投稿をランダムな順序で表示したい場合は、
クエリの引数に 'orderby' => 'rand' を追加することで実現できます。

特定のカテゴリに属する記事をランダムに表示する

$orig_post = $post;
global $post;

// 特定のカテゴリIDを指定します(例: 5)
$specific_category_id = 5;

$args = array(
    'category__in' => array($specific_category_id),  // 特定のカテゴリIDを指定します
    'post__not_in' => array($post->ID),  // 現在の投稿を除外します
    'posts_per_page'=> 2,  // 表示する関連投稿の数を2件に設定します
    'ignore_sticky_posts'=>1,  // 固定表示されている投稿を無視します
    'orderby' => 'rand'  // 関連投稿をランダムに表示します
);

$my_query = new wp_query($args);
if ($my_query->have_posts()) {
    echo '<div id="related_posts"><h3>Related Posts</h3><ul>';
    while ($my_query->have_posts()) {
        $my_query->the_post(); ?>
        <li>
            <div class="relatedthumb">
                <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>">
                    <?php the_post_thumbnail(); ?>
                </a>
            </div>
            <div class="relatedcontent">
                <h3>
                    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>">
                        <?php the_title(); ?>
                    </a>
                </h3>
                <?php the_time('M j, Y') ?>
            </div>
        </li>
        <?php
    }
    echo '</ul></div>';
}

$post = $orig_post;
wp_reset_query();

重要なポイント

  • category__in パラメータに特定のカテゴリIDを指定しています。この例では、カテゴリID 5 を指定していますが、これは目的のカテゴリIDに置き換えてください。
  • orderby => ‘rand’ パラメータにより、取得した投稿をランダムに並び替えます。
  • その他のパラメータは、投稿の数や固定表示の無視など、基本的な設定を行っています。

このコードにより、特定のカテゴリに属する投稿をランダムに表示できます。
必要に応じて、表示する投稿数やカテゴリIDを変更してください。

まとめ

このようにして、WordPressで簡単に関連投稿を表示することができます。
これにより、読者は他の興味深い記事にもアクセスしやすくなり、
サイトの滞在時間が延びる可能性があります。ぜひ試してみてください。