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

サイト内の人気記事一覧を表示するプラグインに「Wordpress Popular Posts」というものがあります。こちらのプラグインをWordpressにインストールして設定をすれば人気の記事一覧を出力することが可能です。

ただ、プラグインをできるだけ使用したくない、使用できない……といったことがあるのもの事実です。そういった方に向けて、人気記事一覧をプラグインを使わずに表示する方法をご紹介したいと思います!

アクセス数をカウントする

今回以下のサイトを参考に本記事を書いています。

WordPress: Display Most Popular (Viewed) Posts without a plugin

上記の記事では、post_views_countというカスタムフィールドを作成し、記事をへのアクセス数を保存して出力する方法が紹介されています。

具体的には以下の部分になります。こちらをテーマのfunctions.phpに追記します。

//カスタムフィールドの「post_views_count」にアクセス数を保存する
function setPostViews($post_id) {
    $count_key = 'post_views_count';
    $count = get_post_meta($post_id, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($post_id, $count_key);
        add_post_meta($post_id, $count_key, '0');
    }else{
        $count++;
        update_post_meta($post_id, $count_key, $count);
    }
}

//カスタムフィールドに保存されているアクセス数を取得する
function getPostViews($post_id){
    $count_key = 'post_views_count';
    $count = get_post_meta($post_id, $count_key, true);
    if($count==''){
        delete_post_meta($post_id, $count_key);
        add_post_meta($post_id, $count_key, '0');
        return "0 View";
    }
        return $count.' Views';
}

上記をfunctions.phpに追加して、アクセスをカウントしたいページに下記のスクリプトを追記します。今回は投稿詳細ページ(single.php)に追記します。

<?php

if(function_exists('setPostViews')){
    setPostViews(get_the_ID());
}

?>

編集したファイルを反映し、投稿を閲覧すると、管理画面上から確認できるカスタムフィールド欄に下記項目追加されます。もしカスタムフィールドが表示されていない場合は、画面上部の「表示オプション」を選択して「カスタムフィールド」の項目にチェックを入れてみて下さい。

popular-posts-without-plugin-img

今後は「post_views_count」にアクセス数がカウントされていきます。こちらの「post_views_count」の値を利用して人気記事一覧を作成します。

人気記事一覧を表示する

single.phpに以下をコピペすると、人気記事一覧がアクセスの多い順に5件表示されるようになります。

<?php

if(function_exists('setPostViews')){
    setPostViews(get_the_ID());
}

$args = array(
    'post_type' => array('post'),
    'posts_per_page' => 5,
    'post_status' => array('publish'),
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'desc'
);

$query = new WP_Query($args);
if($query->have_posts()):
    while($query->have_posts()):
        $query->the_post();
?>

<div class="popularPost">
    <a class="popularPostImage" href="<?php echo get_permalink(); ?>">
        <?php if(has_post_thumbnail()){ the_post_thumbnail( 'post-thumbnail'); } ?>
    </a>
    <div class="popularPostBody">
        <a href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a>
    </div>
    <p><?php echo getPostViews(get_the_ID()); ?></p>
</div>
<?php 
    endwhile;
else:
    echo '投稿がありません';
endif;
wp_reset_postdata();

?>

上記のサンプルでは人気記事のタイトルとサムネイル、該当記事のアクセス数を表示しています。

WP_Queryで「post_views_count」の値を取得し、アクセス数が多い順にソートするようになっています。「posts_per_page」で表示する件数を変更することができます。

テンプレートタグのWP_Queryに関しては以下をご参照いただければと思います!

WP_Query

以上、プラグインなしで人気記事一覧を表示するのご紹介でした。最後まで読んでいただきありがとうございました!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。