WordPressでタグ別に関連記事を表示し、記事が1つの場合は非表示にする方法

ブログの読者に関連する記事を提供することは、訪問者の滞在時間を延ばし、
再訪率を高めるために非常に効果的です。
今回は、WordPressでタグに基づいて関連記事を表示し、
タグに関連する記事が1つしかない場合には非表示にする方法を紹介します。

手順1: single.phpファイルを開く

まず、使用しているテーマフォルダ内のsingle.phpファイルを開きます。これは各投稿の表示を制御するテンプレートファイルです。

手順2: 関連記事表示のためのコードを追加

single.phpファイル内の適切な場所(通常は本文の後)に以下のコードを追加します。
このコードは、タグに基づいて関連記事を取得し、それらを表示するものです。
また、関連記事が1つしかない場合には表示しないように条件を追加しています。

<?php
// 関連記事を表示する関数
function related_posts_by_tags() {
global $post;

$tags = wp_get_post_tags($post->ID);
if ($tags) {
$tag_ids = array();
foreach ($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;

$args = array(
'tag__in' => $tag_ids,
'post__not_in' => array($post->ID),
'posts_per_page' => 5, // 表示する関連記事の数
'caller_get_posts' => 1
);

$my_query = new WP_Query($args);

// 記事の数をカウントする
$related_posts_count = $my_query->post_count;

if ($related_posts_count > 1) {
if ($my_query->have_posts()) {
echo '<h3>関連記事</h3><ul>';
while ($my_query->have_posts()) {
$my_query->the_post();
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php
}
echo '</ul>';
}
} else {
echo '<p>関連記事はありません。</p>';
}
wp_reset_query();
}
}

// 関数を呼び出す
related_posts_by_tags();
?>

カテゴリーを指定する場合

<?php
// 関連記事を表示する関数
function related_posts_by_tags_and_category($category_id) {
    global $post;
    
    $tags = wp_get_post_tags($post->ID);
    if ($tags) {
        $tag_ids = array();
        foreach ($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
        
        $args = array(
            'tag__in' => $tag_ids,
            'category__in' => array($category_id), // 特定のカテゴリーIDを指定
            'post__not_in' => array($post->ID),
            'posts_per_page' => 5, // 表示する関連記事の数
            'caller_get_posts' => 1
        );
        
        $my_query = new WP_Query($args);
        
        // 記事の数をカウントする
        $related_posts_count = $my_query->post_count;

        if ($related_posts_count > 1) {
            if ($my_query->have_posts()) {
                echo '<h3>関連記事</h3><ul>';
                while ($my_query->have_posts()) {
                    $my_query->the_post();
                    ?>
                    <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
                    <?php
                }
                echo '</ul>';
            }
        } else {
            echo '<p>関連記事はありません。</p>';
        }
        wp_reset_query();
    }
}

// 関数を呼び出す。カテゴリーIDを指定
related_posts_by_tags_and_category(12);
?>

ランダムに表示する場合

<?php
// 関連記事を表示する関数
function related_posts_by_tags_and_category($category_id) {
    global $post;
    
    $tags = wp_get_post_tags($post->ID);
    if ($tags) {
        $tag_ids = array();
        foreach ($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
        
        $args = array(
            'tag__in' => $tag_ids,
            'category__in' => array($category_id), // 特定のカテゴリーIDを指定
            'post__not_in' => array($post->ID),
            'posts_per_page' => 5, // 表示する関連記事の数
            'orderby' => 'rand', // ランダムに並び替え
            'caller_get_posts' => 1
        );
        
        $my_query = new WP_Query($args);
        
        // 記事の数をカウントする
        $related_posts_count = $my_query->post_count;

        if ($related_posts_count > 1) {
            if ($my_query->have_posts()) {
                echo '<h3>関連記事</h3><ul>';
                while ($my_query->have_posts()) {
                    $my_query->the_post();
                    ?>
                    <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
                    <?php
                }
                echo '</ul>';
            }
        } else {
            echo '<p>関連記事はありません。</p>';
        }
        wp_reset_query();
    }
}

// 関数を呼び出す。カテゴリーIDを指定
related_posts_by_tags_and_category(12);
?>

手順3: ファイルを保存

single.phpファイルにコードを追加したら、ファイルを保存し、
サーバーにアップロードします。これで設定は完了です。

まとめ

このコードをsingle.phpに追加することで、タグに基づいて関連記事を表示し、
関連記事が1つしかない場合には表示しないようにできます。
これにより、読者により関連性の高いコンテンツを提供し、
サイトのエンゲージメントを向上させることができます。

ぜひ、この方法を試してみて、ブログの読者体験を向上させてください。