サイトアイコン WEBデザインMATOME

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

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

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

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

この記事では、

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


この記事でできること

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

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


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

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

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

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


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

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

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

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


実装手順

① 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が正確に増えないことがあります。

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

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

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


どんな人におすすめか?

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


まとめ

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

今回のように、

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

モバイルバージョンを終了