2021.1.3

【wordpress】記事ごとの閲覧数を管理者ページから確認できるようにする

  • php
  • テクニック

wordpressで投稿記事の閲覧数をプラグインなしで表示させる方法です。

 

functions.phpへの記述

まずはfunctions.phpに以下のコードをコピペします。

function getPostViews($postID){
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
return "0 View";
}
return $count.' Views';
}
function setPostViews($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);
}
}
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

記事閲覧数を取得し、保存する関数です。

 

更に以下のコードも追記します。

add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views', 5, 2);
function posts_column_views($defaults)
{
$defaults['post_views'] = __('Views');
return $defaults;
}function posts_custom_column_views($column_name, $id)
{
if ($column_name === 'post_views') {
echo getPostViews(get_the_ID());
}
}

wordpressの管理画面に“Views(閲覧数)”を表示するための関数です。

 

次に、より正確な閲覧数を取得するためにクローラーのアクセスを除外します。

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;
}

もし、上記のコードでエラーが出る場合は、2行目を

$ua = !isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : '';

 

に変更してください。

 

single.phpへの記述

最後にsingle.phpの<?php get_header(); ?>の直前に

<?php
if( !is_user_logged_in() && !is_bot() ) {
setPostViews(get_the_ID());
} ?><?php setPostViews(get_the_ID()); ?>

を記述します。

 

「is_user_logged_in」はwordpressにログインしているアカウント(自分のアクセス)を除外するための記述です。

 

全てを記述し終わったら、ログイン状態でのアクセスとログインしていない状態(シークレットモードでのアクセス等)で閲覧数の増減を確認してみてください。

 

以上で実装は完了です。お疲れ様でした。

 

Share Please

Read this too