WordPressでサイトやブログを運営している皆さんは、「どの記事がよく読まれているのか」「昨日の記事はどれくらいアクセスがあったか」気になりますよね。
Googleアナリティクスや専用のプラグイン(Site Kit by Googleなど)で確認する方法が一般的ですが、「いちいち別の画面を開いて確認するのが面倒……」と感じたことはありませんか?
「WordPressの『投稿一覧』画面に、そのままPV数が表示されていたら最高なのに!」
そう思い立った私は、生成AIの「Gemini」に相談してみました。その結果、すでに導入していた人気記事ランキング用プラグイン「WordPress Popular Posts」のデータを活用し、コピペだけで実装することに成功しました。
今回は、その作成過程と、実際に使えるコードを共有します。
作成ログ
完成までの作成時間:約10分
使用したツール: WordPress Popular Postsプラグイン、Gemini(生成AI)
完成までのチャットでのやり取り回数:11回
Geminiに指示したプロンプト
ワードプレス管理画面と投稿一覧からページごとのアクセス数を表示する方法はない?
WP Popular Postsやアナリティクス入れてある
Geminiからの提案は下記の3つ
- 方法1:【推奨】専用プラグイン「Post Views Counter」を使う方法
- 方法2:すでに導入済みの「WordPress Popular Posts (WPP)」を使う方法
- 方法3:Google Analyticsのデータを使う(Site Kit by Google)方法
Geminiからは3つの提案がありましたが、今回は「方法2:すでに導入済みの『WordPress Popular Posts (WPP)』を使う方法」を採用しました。新たなプラグインをインストールする必要がなく、サイトが重くなるのを防げるためです。
実装までの3ステップ方法
手順はとてもシンプルですが、重要なファイルを触るため慎重に行いましょう。
ステップ1:必ずバックアップを取る
これからfunctions.phpという重要なファイルを編集します。万が一画面が真っ白になっても復旧できるよう、必ずファイルのバックアップを取ってから作業してください。
ステップ2:プラグインの確認
「WordPress Popular Posts」が有効化されているか確認してください。まだの方はインストール・有効化をお願いします。
ステップ3:functions.phpにコードを追加
以下のコードをコピーして、使用しているテーマのfunctions.phpの適切な場所か一番末尾に追加してください。
完成版コード
/* -------------------------------------------------------
* WPP閲覧数表示・並び替え設定(重複防止・全投稿タイプ対応)
* ------------------------------------------------------- */
// 1. 自動ですべての公開投稿タイプを取得してフックを登録
function setup_wpp_admin_columns_final() {
$args = array('public' => true);
$post_types = get_post_types($args, 'names');
if (isset($post_types['attachment'])) unset($post_types['attachment']);
foreach ($post_types as $type) {
// 既存のフックを可能な限り削除(念のため)
remove_filter("manage_{$type}_posts_columns", 'add_views_columns_final');
remove_action("manage_{$type}_posts_custom_column", 'show_views_custom_columns_final');
// カラム追加
if ($type === 'page') {
add_filter('manage_pages_columns', 'add_views_columns_final');
add_action('manage_pages_custom_column', 'show_views_custom_columns_final', 10, 2);
add_filter('manage_edit-page_sortable_columns', 'make_views_column_sortable_final');
} elseif ($type === 'post') {
add_filter('manage_posts_columns', 'add_views_columns_final');
add_action('manage_posts_custom_column', 'show_views_custom_columns_final', 10, 2);
add_filter('manage_edit-post_sortable_columns', 'make_views_column_sortable_final');
} else {
add_filter("manage_{$type}_posts_columns", 'add_views_columns_final');
add_action("manage_{$type}_posts_custom_column", 'show_views_custom_columns_final', 10, 2);
add_filter("manage_edit-{$type}_sortable_columns", 'make_views_column_sortable_final');
}
}
}
add_action('admin_init', 'setup_wpp_admin_columns_final');
/* --- 共通処理 --- */
// カラム定義
function add_views_columns_final($columns) {
if (!isset($columns['wpp_views_daily'])) {
$columns['wpp_views_daily'] = '24時間';
$columns['wpp_views_all'] = '全期間';
}
return $columns;
}
function show_views_custom_columns_final($column_name, $post_id) {
static $printed_cache = [];
$check_key = $post_id . '_' . $column_name;
if (isset($printed_cache[$check_key])) {
return;
}
if (!function_exists('wpp_get_views')) {
if ($column_name === 'wpp_views_all' || $column_name === 'wpp_views_daily') echo '-';
return;
}
switch ($column_name) {
case 'wpp_views_all':
echo wpp_get_views($post_id, 'all', true);
$printed_cache[$check_key] = true;
break;
case 'wpp_views_daily':
echo wpp_get_views($post_id, 'daily', true);
$printed_cache[$check_key] = true;
break;
}
}
// ソート列定義
function make_views_column_sortable_final($columns) {
$columns['wpp_views_all'] = 'wpp_views_all';
return $columns;
}
// スタイル
function custom_admin_views_styles_final() {
echo '<style>
.column-wpp_views_all { width: 90px; }
.column-wpp_views_daily { width: 90px; font-weight: bold; color: #2271b1; }
</style>';
}
add_action('admin_head', 'custom_admin_views_styles_final');
// ソート処理
function sort_views_column_query_final($query) {
if (!is_admin() || !$query->is_main_query()) return;
if ($query->get('orderby') === 'wpp_views_all') {
global $wpdb;
add_filter('posts_join', function($join) use ($wpdb) {
if (strpos($join, $wpdb->prefix . 'popularpostsdata') === false) {
$join .= " LEFT JOIN {$wpdb->prefix}popularpostsdata AS wpp ON {$wpdb->posts}.ID = wpp.postid ";
}
return $join;
});
add_filter('posts_orderby', function($orderby) use ($query) {
$order = strtoupper($query->get('order'));
if ($order !== 'ASC') $order = 'DESC';
return " wpp.pageviews {$order}, {$orderby} ";
});
}
}
add_action('pre_get_posts', 'sort_views_column_query_final');
確認してみよう

管理画面の「投稿一覧」を見てみてください。 記事タイトルの横などに【24時間】【全期間】という項目が増えていれば成功です!
まとめ
生成AIを活用することで、プログラミングの専門知識がなくても、自分好みの管理画面にカスタマイズすることができました。
- 専用画面を開く手間がなくなる
- 記事ごとの反応がひと目で分かる
- リライトすべき記事が見つけやすくなる
WordPressのサイト運営が少しだけ楽になるこのカスタマイズ、ぜひ試してみてくださいね。
関連記事
毎月のWordPress記事投稿数、まだ手動でカウントしていませんか? 面倒な集計作業は、生成AI (Gemini) を使って自動化しましょう。この記事では、ダッシュボードに「記事数カウンター」ウィジェットを自作する方法を、コピペで使えるPHPコード付きで解説します。

