【備忘録】WordPressで“投稿一覧”に簡単なページビュー数を表示する方法
ページビュー数やアクセス数の確認などは「Google Analytics」などを利用されている方が多いと思います。それでも手軽にピンポイントでビュー数を確認できると楽かなーと思い作成してみました。
サイト作成者や管理者じゃない方は、これで十分なのかなと思います。
ステップ 1: アクセス数を日付ごとに記録
functions.phpに以下のようなコードを追加して、日付ごとに閲覧数を記録する機能を実装します。
// 閲覧数を日付ごとに記録する
function track_post_views_per_day($post_id) {
if (!is_single()) return;
if (empty($post_id)) {
global $post;
$post_id = $post->ID;
}
$today = date('Y-m-d');
$views = get_post_meta($post_id, 'views_' . $today, true);
$views = ($views) ? $views + 1 : 1;
update_post_meta($post_id, 'views_' . $today, $views);
}
add_action('wp_head', 'track_post_views_per_day');
ステップ 2: 閲覧数を集計
次に、日別のデータを週別、月別に集計する関数を追加します。
// 閲覧数を集計する
function get_views_summary($post_id, $period = 'daily') {
$start_date = date('Y-m-d');
$end_date = date('Y-m-d');
switch ($period) {
case 'weekly':
$start_date = date('Y-m-d', strtotime('-1 week'));
break;
case 'monthly':
$start_date = date('Y-m-d', strtotime('-1 month'));
break;
}
$date_range = new DatePeriod(
new DateTime($start_date),
new DateInterval('P1D'),
new DateTime($end_date)
);
$total_views = 0;
foreach ($date_range as $date) {
$views = get_post_meta($post_id, 'views_' . $date->format('Y-m-d'), true);
$total_views += ($views) ? $views : 0;
}
return $total_views;
}
ステップ 3: 管理画面で閲覧数を表示
最後に、投稿管理画面に日別、週別、月別の閲覧数を表示するように設定します。
// 管理画面の投稿一覧に閲覧数のカラムを追加
function add_views_summary_column($columns) {
$columns['views_summary'] = 'Views Summary';
return $columns;
}
add_filter('manage_posts_columns', 'add_views_summary_column');
// カラムの内容を表示する
function display_views_summary_column($column_name, $post_id) {
if ($column_name == 'views_summary') {
$daily_views = get_views_summary($post_id, 'daily');
$weekly_views = get_views_summary($post_id, 'weekly');
$monthly_views = get_views_summary($post_id, 'monthly');
echo "Daily: $daily_views<br>Weekly: $weekly_views<br>Monthly: $monthly_views";
}
}
add_action('manage_posts_custom_column', 'display_views_summary_column', 10, 2);
注意点
このコードは基本的なロジックを示しており、実際に使用する場合はさらに詳細なエラーハンドリングや最適化が必要です。
日別データはメタデータが多くなるため、データベースのパフォーマンスに影響を与える可能性があります。定期的に古いデータをクリーンアップすることをお勧めします。
キャッシュの問題も考慮する必要があります。特に動的に変更されるデータについては、キャッシュプラグインの設定を適切に管理する必要があります。
●コピペ用
WordPressのfunctions.phpファイルに追加するための完全なコードを以下にまとめました。このコードは投稿の閲覧数を日別、週別、月別で集計し、投稿一覧ページに「Views Summary」という一つのカラムで表示します。
// 閲覧数を日付ごとに記録する
function track_post_views_per_day($post_id) {
if (!is_single()) return;
if (empty($post_id)) {
global $post;
$post_id = $post->ID;
}
$today = date('Y-m-d');
$views = get_post_meta($post_id, 'views_' . $today, true);
$views = ($views) ? $views + 1 : 1;
update_post_meta($post_id, 'views_' . $today, $views);
}
add_action('wp_head', 'track_post_views_per_day');
// 閲覧数を集計する
function get_views_summary($post_id, $period = 'daily') {
$start_date = date('Y-m-d');
$end_date = date('Y-m-d');
switch ($period) {
case 'weekly':
$start_date = date('Y-m-d', strtotime('-1 week'));
break;
case 'monthly':
$start_date = date('Y-m-d', strtotime('-1 month'));
break;
}
$date_range = new DatePeriod(
new DateTime($start_date),
new DateInterval('P1D'),
new DateTime($end_date)
);
$total_views = 0;
foreach ($date_range as $date) {
$views = get_post_meta($post_id, 'views_' . $date->format('Y-m-d'), true);
$total_views += ($views) ? $views : 0;
}
return $total_views;
}
// 管理画面の投稿一覧に閲覧数のカラムを追加
function add_views_summary_column($columns) {
$columns['views_summary'] = 'Views Summary';
return $columns;
}
add_filter('manage_posts_columns', 'add_views_summary_column');
// カラムの内容を表示する
function display_views_summary_column($column_name, $post_id) {
if ($column_name == 'views_summary') {
$daily_views = get_views_summary($post_id, 'daily');
$weekly_views = get_views_summary($post_id, 'weekly');
$monthly_views = get_views_summary($post_id, 'monthly');
echo "Daily: $daily_views<br>Weekly: $weekly_views<br>Monthly: $monthly_views";
}
}
add_action('manage_posts_custom_column', 'display_views_summary_column', 10, 2);
おまけ
管理者としてログインしている場合は、ビュー数として数えないようにする方法
閲覧数カウント関数を修正する
functions.phpに追加した閲覧数をカウントする関数を、ログインしているユーザーを除外するように修正します。以下はそのためのコード例です:
function track_post_views_per_day($post_id) {
if (!is_single()) return; // 単一の投稿ページ以外では何もしない
if (is_user_logged_in()) return; // ログインしている場合は何もしない
if (empty($post_id)) {
global $post;
$post_id = $post->ID;
}
$today = date('Y-m-d');
$views = get_post_meta($post_id, 'views_' . $today, true);
$views = ($views) ? $views + 1 : 1;
update_post_meta($post_id, 'views_' . $today, $views);
}
add_action('wp_head', 'track_post_views_per_day');
このコードの主な変更点は、is_user_logged_in() 関数を使用して、ユーザーがログインしているかどうかをチェックし、ログインしている場合はビュー数をカウントしないようにしている点です。これにより、ログインユーザーのページアクセスはビュー数に含まれなくなります。
注意点
この方法では、すべてのログインユーザーがカウントから除外されます。特定のユーザーロール(例えば、管理者や編集者のみ)を対象にしたい場合は、さらに条件を追加する必要があります。例えば、次のようにロールに基づいてチェックを行うことができます:
if (is_user_logged_in()) {
$user = wp_get_current_user();
if (in_array('administrator', (array) $user->roles)) {
return; // 管理者の場合はカウントしない
}
}
このコードの変更もfunctions.phpに追加するか、または専用のプラグインを作成してそこに追加します。これによりテーマが更新された際に変更が失われることを防ぐことができます。
この方法を用いることで、ログインしているユーザーのビュー数をカウントから除外し、より正確なページビュー数を確保することが可能です。
この記事が気に入ったらサポートをしてみませんか?