【wordpress】記事ごとの閲覧数を管理者ページから確認できるようにする
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にログインしているアカウント(自分のアクセス)を除外するための記述です。
全てを記述し終わったら、ログイン状態でのアクセスとログインしていない状態(シークレットモードでのアクセス等)で閲覧数の増減を確認してみてください。
以上で実装は完了です。お疲れ様でした。
関連記事