【WordPress】プラグインなし!functions.phpだけで管理画面にアクセス数(PV)を表示する方法[:]

WordPressでサイト運営をしていると、

  • 「今日どれくらいアクセスがあったか?」
  • 「ざっくりでいいから管理画面ですぐ見たい」
  • 「プラグインを増やしたくない」

と思うことはありませんか?

実は、プラグインを使わずに
functions.php に少しコードを書くだけで、
管理画面(ダッシュボード)にアクセス数(PV)を表示できます。

この記事では、

  • プラグインなし
  • functions.phpにコピペするだけ
  • 管理画面に「今日のPV」「累計PV」を表示

という シンプルで実務向きな方法 を解説します。


この記事でできること

この記事の方法を使うと、次のようなことができます。

  • プラグイン不要
  • functions.php に直接記述
  • 管理画面のダッシュボードに
    • 今日のアクセス数(PV)
    • 累計アクセス数(PV)
  • 管理者のみカウントリセット可能

※ Google Analytics(GA4)の代わりではなく、
「ざっくり確認用の簡易PV」 として使う想定です。


なぜプラグインを使わないのか?

アクセス解析系プラグインは便利ですが、次のようなデメリットもあります。

  • プラグインが増えるほど管理コストが増える
  • 管理画面が重くなる
  • テーマ切り替えや環境差分で不具合が出やすい

その点、functions.php に直接書く方法は、

  • 軽量
  • 自分で中身を把握できる
  • 不要になればすぐ削除できる

というメリットがあります。


実装の仕組み(ざっくり)

今回の仕組みはとてもシンプルです。

  1. ページが表示されたときにPVをカウント
  2. WordPressの option に数値を保存
  3. 管理画面ダッシュボードにウィジェットとして表示

データベース構造をいじる必要もありません。


実装手順

① functions.php を開く

以下のいずれかを開きます。

  • 使用中テーマの functions.php
  • 子テーマの functions.php(推奨)

② 下記コードをそのまま貼り付ける

<?php
/* =========================================================
 * 簡易アクセスカウンター(PV)
 * functions.php 用
 * ======================================================= */

if (!defined('ABSPATH')) exit;

/* =========================
 * 設定
 * ======================= */
// ログイン中ユーザーをカウントしない
define('KZ_PV_EXCLUDE_LOGGED_IN', true);

/* =========================
 * アクセスカウント
 * ======================= */
add_action('template_redirect', function () {

  // 管理画面・API系を除外
  if (is_admin()) return;
  if (defined('REST_REQUEST') && REST_REQUEST) return;
  if (wp_doing_ajax()) return;
  if (is_preview() || is_feed()) return;

  // ログインユーザー除外
  if (KZ_PV_EXCLUDE_LOGGED_IN && is_user_logged_in()) return;

  $today = wp_date('Y-m-d');

  $opt_total = 'kz_pv_total';
  $opt_today = 'kz_pv_today';
  $opt_date  = 'kz_pv_today_date';

  $total     = (int) get_option($opt_total, 0);
  $today_pv  = (int) get_option($opt_today, 0);
  $saved_day = get_option($opt_date);

  // 日付が変わったら今日のPVをリセット
  if ($saved_day !== $today) {
    $today_pv = 0;
    update_option($opt_today, 0, false);
    update_option($opt_date, $today, false);
  }

  // カウント
  update_option($opt_total, $total + 1, false);
  update_option($opt_today, $today_pv + 1, false);

}, 20);

/* =========================
 * ダッシュボードウィジェット
 * ======================= */
add_action('wp_dashboard_setup', function () {

  wp_add_dashboard_widget(
    'kz_pv_widget',
    'アクセス数(簡易PV)',
    function () {

      $total = (int) get_option('kz_pv_total', 0);
      $today = (int) get_option('kz_pv_today', 0);
      $date  = get_option('kz_pv_today_date', wp_date('Y-m-d'));
      ?>
      <div style="line-height:1.8;">
        <p>
          <strong>今日(<?php echo esc_html($date); ?>)</strong><br>
          <span style="font-size:24px;font-weight:bold;">
            <?php echo number_format_i18n($today); ?>
          </span> PV
        </p>

        <p>
          <strong>累計</strong><br>
          <?php echo number_format_i18n($total); ?> PV
        </p>

        <?php if (current_user_can('manage_options')) : ?>
          <hr>
          <a class="button" href="<?php
            echo esc_url(
              wp_nonce_url(
                admin_url('index.php?kz_pv_reset=1'),
                'kz_pv_reset'
              )
            );
          ?>">カウントをリセット</a>
        <?php endif; ?>
      </div>
      <?php
    }
  );
});

/* =========================
 * リセット処理
 * ======================= */
add_action('admin_init', function () {

  if (!current_user_can('manage_options')) return;
  if (empty($_GET['kz_pv_reset'])) return;
  if (!check_admin_referer('kz_pv_reset')) return;

  update_option('kz_pv_total', 0, false);
  update_option('kz_pv_today', 0, false);
  update_option('kz_pv_today_date', wp_date('Y-m-d'), false);

  wp_safe_redirect(admin_url('index.php'));
  exit;
});

③ 表示される場所

管理画面 → ダッシュボード

そこに
「アクセス数(簡易PV)」 というウィジェットが表示されます。

  • 今日のPV
  • 累計PV
  • 管理者のみリセットボタン

という構成です。


注意点(必ず読んでください)

キャッシュ系プラグインを使っている場合

以下を使用していると、PVが正確に増えないことがあります。

  • LiteSpeed Cache
  • WP Rocket
  • Cloudflare
  • サーバー側フルページキャッシュ

これは、PHPが毎回実行されないためです。

👉
正確な解析が必要な場合は、

  • GA4の数値を管理画面に表示
  • JavaScript + AJAXでカウント

などの方法がおすすめです。


どんな人におすすめか?

この方法は、次のような方に向いています。

  • プラグインを極力使いたくない
  • 管理画面で「今日どれくらい見られてるか」だけ知りたい
  • 自分やクライアント用の簡易確認用途
  • 開発・検証環境でのアクセスチェック

まとめ

WordPressは、ちょっとした工夫で
管理画面をかなり便利にカスタマイズできます。

今回のように、

  • functions.phpに直接書く
  • 必要最低限の機能だけ作る

という考え方は、
制作・保守の現場ではかなり使えます。