記事のアクセス数をプラグインなしで計測しWordPressの管理画面に表示する

|

記事のアクセス数を計測し、記事がどのくらい読まれているのかを把握することで、ブログ運営の指標とすることができます。

また、カウントしたView数は『人気記事』を出力する際にも使用することもできますので前準備として作成しておきましょう。

今回は、記事のアクセス数をプラグインなしで計測し記事のView数と設定しているアイキャッチ画像が管理画面上に表示される方法をご紹介します。

記事の閲覧数をカスタムフィールドで計測するための関数を追加する

まずはアクセス数をカウントするために、WordPressの記事ページにカスタムフィールドを追加し、アクセスがあったら値を+1する関数をfunctions.phpに追加します。

functions.phpに追加
//アクセス数を保存
function set_post_views($postID) {
  $count_key = 'post_views_count';
  $count = get_post_meta($postID, $count_key, true);
  if($count==''){
      $count = 0;
      delete_post_meta($postID, $count_key);
      add_post_meta($postID, $count_key, '0');
  }else{
    $count++;
    update_post_meta($postID, $count_key, $count);
  }
}

上記の関数を実行すると、『post_views_count』というカスタムフィールドを作成し、アクセスがある度値が+1されます。

『$count_key』でカスタムフィールドの名前を設定し、『$count++』でカスタムフィールドの値を+1する処理を設定しています。

記事が閲覧された際に、関数『set_post_views』が実行されるように設定する

記事を出力するための関数の記述が終了したら、アクセスされたときに『post_views_count』の値を+1するための記述をsingle.phpに行います。

値を単純に+1するだけなら下記のコードをsingle.phpに記述するだけでOKです。

<?php set_post_views( get_the_ID() ); ?>

しかしながら、上記のコードでは自分で記事を確認するために表示した場合や検索エンジンのクローラーが巡回した場合にもView数としてカウントされてしまいます。

純粋なユーザーからのアクセスのみをカウントするために、クローラーからのアクセスやログイン中のアクセスをカウントしない設定を追加しましょう。

まずは、アクセスされたときにクローラーかどうかを識別するための関数をfunctions.phpに追加してください。

functions.phpに記述
//クローラーのアクセス判別
function is_bot() {
  $ua = $_SERVER['HTTP_USER_AGENT'];

  $bot = array(
        "googlebot",
        "msnbot",
        "yahoo"
  );
  foreach( $bot as $bot ) {
    if (stripos( $ua, $bot ) !== false){
      return true;
    }
  }
  return false;
}

『is_bot』という名前で、クローラーからのアクセスかどうかを確認する関数を作成します。『$bot = array』の中の値で判別するクローラーを指定しましょう。今回は、google・msn・yahooの検索エンジンかどうかを判別して値を返すように設定しています。

functions.phpへの記述が終わったら、値を+1するための記述をsingle.php内に行いましょう。記述は、single.phpの中ならどこもOKです。

single.phpの中に記述
<?php if( !is_user_logged_in() && !is_bot() ) { set_post_views( get_the_ID() ); } ?>

上記のコードを記述することで、WordPressにログイン中の場合とクローラーからのアクセスを判別してからカスタムフィールドの『post_views_count』の値を+1する処理を実行することができます。

phpでは、『!』をつけるとそれ以外という意味になります。『!is_user_logged_in() 』でログインしているとき以外、『!is_bot()』で先程関数に記載したクローラー以外というように指定しています。

また、必ずアクセスを保存する関数名とphp内の『set_post_views』の部分を同じにしてください。別々の名前にした場合は、functins.php内の関数とsingle.phpの中の記述が連携されず、動作しないので注意しましょう。

single.phpへの記述が完了したら、ログインしていない状態で適当な記事を何回か開いて確認してみましょう。

※WordPressにログインしているブラウザと別のブラウザで開くとわざわざログアウトする手間が省けます。

何回か記事を開いたら、管理画面上で値が反映されているかを確認しましょう。WordPressの確認したい記事の投稿画面にアクセス→右上にある『表示オプション』をクリック→『カスタムフィールド』にチェックを入れるとカスタムフィールドの値を確認することができます。

カスタムフィールドの値にチェックをいれたら、画面の下の方にカスタムフィールドの設定画面が表示されます。

上の画像のようにカスタムフィールドの名前に『post_views_count』値に値が入っていれば、人気記事を出力するためのカスタムフィールドの作成は完了です。

管理画面上で記事のアクセス数とアイキャッチ画像が確認できるようにする

記事のアクセス数やサムネイル画像を確認する際に、一つ一つ投稿ページを開いて確認しているとかなりの手間がかかります。管理画面の投稿一覧で、簡単に確認できるようにアクセス数と設定されているアイキャッチ画像を出力しておきましょう。

WordPressの投稿管理画面の項目を増やすためには、functions.phpに関数を追加します。

functions.phpに記述
function manage_posts_columns($columns) {
$columns['post_views_count'] = 'view数';
$columns['thumbnail'] = 'サムネイル';
return $columns;
}
function add_column($column_name, $post_id) {
  /*View数呼び出し*/
  if ( $column_name == 'post_views_count' ) {
      $stitle = get_post_meta($post_id, 'post_views_count', true);
    }
    /*サムネイル呼び出し*/
  if ( $column_name == 'thumbnail') {
    $thumb = get_the_post_thumbnail($post_id, array(100,100), 'thumbnail');
  }
   /*ない場合は「なし」を表示する*/
  if ( isset($stitle) && $stitle ) {
    echo attribute_escape($stitle);
  }
  else if ( isset($thumb) && $thumb ) {
    echo $thumb;
  }
  else {
    echo __('None');
  }
}
add_filter( 'manage_posts_columns', 'manage_posts_columns' );
add_action( 'manage_posts_custom_column', 'add_column', 10, 2 );

上記のソースコードを追加することで、アクセス数とアイキャッチ画像がWordPressの投稿一覧上に表示されるようになります。

投稿画面一覧の設定を行うときは、WordPressにデフォルトで設定されている『manage_posts_columns』という関数を使用します。

カラムを定義するときは、『$columns['カラム名(column_name)'] = '見出しに使用する名前';』という形で記述してください。

カラム名の定義が完了したら『add_column』という関数でカラムに追加する内容を設定しています。また、アクセスが無い場合やアイキャッチ画像が設定されていない場合は『なし』が出力されるように設定しています。

functions.phpへの記述が完了したら、投稿一覧画面にアクセス数とアイキャッチ画像が出力されているかを確認してください。

一覧の右側に『view数』『サムネイル』の項目が追加され、きちんと表示されていれば設定完了です。

以上で、WordPressで閲覧数をカウントする関数と投稿管理画面にview数とアイキャッチを追加するための記述は完了です。

view数は人気記事を出力する際などにも使用できるので、是非設定してみてください。