WordPressで人気記事を表示する方法(プラグインなし)

WordPressで人気記事を表示する方法(プラグインなし)

WordPressのサイトで、人気記事を表示することはよくある機能のひとつです。しかし、プラグインを使わずに自分で実装する方法を知っておくと、より柔軟で軽量なサイトを作成できます。この記事では、プラグインなしで人気記事を表示する方法を解説します。

1. 投稿の閲覧数を管理する

まず、投稿の閲覧数を記録し、それを基に人気記事を表示する方法を説明します。WordPressでは、投稿の閲覧数をカスタムフィールド(メタデータ)として保存する方法を使います。

functions.phpに記述するコード

PHP
// 投稿の閲覧数を取得
function getPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    
    if ($count == '') {
        return '0 PV';
    }
    return number_format($count) . ' PV';
}

// 投稿の閲覧数を増加(詳細ページのみ)
function setPostViews($postID) {
    if (!is_single()) return; // 記事詳細ページのみカウント

    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);

    if ($count == '') {
        $count = 0;
    }
    $count++;
    update_post_meta($postID, $count_key, $count);

    // キャッシュクリア(反映遅延防止)
    wp_cache_delete($postID, 'post_meta');
}

// 隣接する投稿の meta タグを削除(SEO対策)
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

上記のコードをfunctions.phpに追加します。このコードのポイントは、投稿の詳細ページでのみ閲覧数をカウントする部分です。setPostViews関数でカウントを増やし、getPostViews関数で閲覧数を取得します。

次に、投稿ページ(single.php)で閲覧数を増やす処理を呼び出します。

single.phpでのコード例

PHP
<?php
if (have_posts()) : while (have_posts()) : the_post();
    setPostViews(get_the_ID()); // PVを増やす
?>
<!-- 投稿内容表示 -->
<?php endwhile; endif; ?>

これで、投稿の閲覧数が正しくカウントされます。

2. 人気記事を表示するためのWP_Query

次に、人気記事を表示するために、WP_Queryを使って、閲覧数が多い順に記事を取得します。この部分は、カスタム投稿タイプを使用している場合でも、通常の投稿でも同じ方法を使えます。

archive.php(または表示したいテンプレートファイル)に追加するコード

PHP
<?php
$args = array(
    'post_type'      => 'post',  // 通常の投稿の場合は'post'。カスタム投稿の場合は'post_type' => 'カスタム投稿タイプ'
    'posts_per_page' => 4,       // 表示する記事数
    'meta_key'       => 'post_views_count', // PV数カウントのカスタムフィールド
    'orderby'        => 'meta_value_num',   // 数値としてソート
    'order'          => 'DESC',    // 降順(PVが多い順)
);

$popular_query = new WP_Query($args);

if ($popular_query->have_posts()) : ?>
    <div class="popular-posts">
        <?php while ($popular_query->have_posts()) : $popular_query->the_post(); ?>
            <div class="post-item">
                <a href="<?php the_permalink(); ?>">
                    <?php the_post_thumbnail('full'); ?>
                    <h3><?php the_title(); ?></h3>
                    <p><?php the_excerpt(); ?></p>
                    <span><?php echo getPostViews(get_the_ID()); ?> views</span>
                </a>
            </div>
        <?php endwhile; ?>
    </div>
    <?php wp_reset_postdata(); ?>
<?php else : ?>
    <p>おすすめ記事がありません。</p>
<?php endif; ?>

上記のコードは、meta_keyとしてpost_views_countを指定し、これを基に人気記事を表示します。記事のタイトル、アイキャッチ画像、閲覧数を表示する例です。

3. カスタム投稿タイプの場合

通常の投稿だけでなく、カスタム投稿タイプでも同じ方法で人気記事を表示できます。例えば、カスタム投稿タイプが「column」の場合、WP_Queryの引数を次のように変更します。

PHP
$args = array(
    'post_type'      => 'column',  // カスタム投稿タイプの場合
    'posts_per_page' => 4,         // 4件表示
    'meta_key'       => 'post_views_count', // PV数カウントのカスタムフィールド
    'orderby'        => 'meta_value_num',   // 数値としてソート
    'order'          => 'DESC',    // 降順(PVが多い順)
);

これにより、カスタム投稿タイプ「column」に関する人気記事が表示されます。

まとめ

今回は、WordPressで人気記事を表示する方法を解説しました。プラグインを使わずに、WP_Queryを使って投稿の閲覧数を基に人気記事を表示する方法は、軽量で柔軟性があります。カスタム投稿タイプを使っている場合でも、WP_Queryの引数を調整することで簡単に対応可能です。これを利用して、サイトに合った人気記事の表示を実現しましょう。

制作のご相談・ご依頼はこちらから!

Author

WARACRO(ワラクロ)

2018年に起業し、Webデザイナー・WebディレクターとしてWordPress案件を中心にWeb制作のお仕事をしています。
このブログでは、Webサイト制作に関する情報をお届けしています。

WordPress学習におすすめの書籍

Amazonの読み放題サービスKindle Unlimited無料体験キャンペーン実施中!

Amazon Kindle Unlimited 公式
Webデザイン学習におすすめの講座
To Top