MENU

WordPressで記事を新着順ではなく人気順・ページビュー数順で表示するためのソースコードをメモしていきます。プラグインを使用しなくてもかなり簡単に実装できちゃいます。

ざっくりとした実装の流れは以下の通りです。

  1. 投稿にページビュー数をカウントするカスタムフィールドを用意
  2. 記事(single.php)が開かれるたびにカウントを上昇させる(ログイン時やロボットを除く)
  3. WP_Queryでページビュー数用のカスタムフィールドでソートさせるだけ

以上の流れになります。以外と簡単ですよね。

カスタムフィールドを使用するので、ビュー数を表示させるのも簡単です。

WP_Queryを使用してカスタムフィールドでソートさせる方法は以下でメモしてありますので、イメージがしにくい方は参考にしてみてください。

目次

手順1:function.phpに関数を用意しておく

冒頭で説明した流れの1・2を担ってくれる関数と、ページ数を取得してくれる関数を作成しておきます。

function.phpに以下を記述しておきます。

//記事のビュー数を更新させる
function setPostViews($post_id) {
  $custom_key = 'post_views_count';
  $count = get_post_meta($post_id, $custom_key, true);
  //初めてのビューどうか
  if($count == ''){
    delete_post_meta($post_id, $custom_key);
    add_post_meta($post_id, $custom_key, '0');
  }else{
    $count++;
    update_post_meta($post_id, $custom_key, $count);
  }
}

//記事のビュー数を取得
function getPostViews($post_id){
  $custom_key = 'post_views_count';
  $count = get_post_meta($post_id, $custom_key, true);
  if($count==''){
    //まだ0ビューなら
    delete_post_meta($post_id, $custom_key);
    add_post_meta($post_id, $custom_key, '0');
    return "0 View";
  }
  return $count.' Views';
}

前者ではadd_post_meta ()update_post_meta() を用いて、ビュー数のカウンター用カスタムフィールドを操作しています。

後者は関数で用意しておかなくても簡単にページ数は表示できると思うので、好みでどうぞ。

カスタムフィールドの値を取得する方法は以下の記事でメモしてありますので、こちらも参考にしてみてください。

 

single.php(投稿記事用のファイル)で作成した関数を呼び出す

single.phpで関数を呼び出し、記事が閲覧されるたびにview数を更新していきます。

場所はget_header() 以降であればどこでも問題ないと思います。

<?php
// 記事のview数を更新(ログイン時・ロボットを除く)
  if(!is_user_logged_in() && !is_robots()):
    setPostViews(get_the_ID());
  endif;
?>

view数の更新はfunction.phpで作成しておいたsetPostViews()で行います。

条件として、ログインしている場合やロボットの場合は呼び出さないようにしています。(この辺は任意で)

私は自分でビュー数を上げてしまわないように、必ずログインしてから記事を開くようにしています。

人気順・ページビュー数順に表示させる

人気順での表示は、WP_Queryを使用してカスタムフィールドでソートし、ループを回します。

function.phpで設定したビュー数をカウントするためのカスタムフィールドのキーは'post_views_count'なので、こちらでソートさせるだけです。

例 : 人気順で記事タイトルを10件表示(リンク付き)

<?php
$args = array(
  'post_type' => 'post',
  'meta_key' => 'post_views_count',
  'orderby' => 'meta_value_num',
  'order'=>'DESC',
  'posts_per_page' => 10,
);

$the_query = new WP_Query( $args );
if($the_query->have_posts()):
  while($the_query->have_posts()): $the_query->the_post();
    echo '<li><a href="'.get_the_permalink(),'">'.get_the_title().'</a></li>'
  endwhile;
endif;
wp_reset_postdata();
?>

以上になります!

これで、簡単に記事をページビュー数順で表示させることができます!

ループの中身はそれぞれ記事を表示させたいようにカスタマイズしてください。

- Thank you for reading this to the end. -
TOPへ Top