サイト全体のアクセス数(PV)を表示する方法

Cocoonカスタマイズ集
この記事は約4分で読めます。
記事内に広告が含まれています。

はじめに

以下の記事では、Cocoonでプラグインを使わずに、アクセスカウンターを設置する方法を紹介しています。

しかし、掲載されているコードをそのまま使用すると、フッターなどに設置した際にPV数が期待通りとならず、0件で表示されてしまうという問題が発生します。

そこで、サイト全体のPV数を正しく表示されるように修正します。

この記事では、この方法について説明します。

問題点

原因

もともとget_todays_pv()などのCocoon標準関数は、投稿ごとのアクセス数を集計(サイト全体のPV数ではありません)することを目的としています。
そのため、内部でglobal $post->IDを無条件に参照している点にこの不具合の根本原因があります。

フッターやメインループ外でショートコードが実行された場合、取得される$post->IDが0となるため、指定IDが存在しない扱いとなり0件として出力されてしまいます。

対策

Cocoon 2.9.4で新たに追加されたアクセス集計機能(cocoon_analytics_total_pv)を活用し、サイト全体の期間それぞれのPV数を取得します。

完成イメージ

本日: 144 昨日: 81 週: 606 月: 4,507 全体: 58,878

使用方法

以下にショートコードを示します。

[my_access_pv]

実装手順

以下のコードをfunctions.phpに追加します。

add_shortcode('my_access_pv', function () {
  $today = current_time('Y-m-d');

  // 表示項目と取得条件の配列定義
  $pv_items = [
    [
      'key'   => 'today',
      'label' => '本日:',
      'from'  => $today,
      'to'    => $today,
    ],
    [
      'key'   => 'yesterday',
      'label' => '昨日:',
      'from'  => date('Y-m-d', strtotime($today . ' -1 day')),
      'to'    => date('Y-m-d', strtotime($today . ' -1 day')),
    ],
    [
      'key'   => 'week',
      'label' => '週:',
      'from'  => date('Y-m-d', strtotime($today . ' -6 days')),
      'to'    => $today,
    ],
    [
      'key'   => 'month',
      'label' => '月:',
      'from'  => date('Y-m-01', strtotime($today)),
      'to'    => $today,
    ],
    [
      'key'   => 'all',
      'label' => '全体:',
      'from'  => '2000-01-01',
      'to'    => $today,
    ],
  ];

  ob_start();
  ?>
  <div class="admin-pv site-access-pv">
    <span class="fa fa-bar-chart fa-fw" aria-hidden="true"></span>
    <?php foreach ($pv_items as $item): ?>
      <?php $pv = cocoon_analytics_total_pv($item['from'], $item['to']); ?>
      <span class="<?= esc_attr($item['key']); ?>-pv">
        <span class="<?= esc_attr($item['key']); ?>-pv-label"><?= esc_html($item['label']); ?></span>
        <span class="<?= esc_attr($item['key']); ?>-pv-count"><?= number_format_i18n($pv); ?></span>
      </span>
    <?php endforeach; ?>
  </div>
  <?php
  return ob_get_clean();
});

さいごに

今回紹介した方法を使えば、フッターやサイドバーといった共通ウィジェットエリアに設置しても、PV数が「0」にならず正しいアクセス数を表示させることができます。
Cocoon標準のデザインを活用して実装できるため、Webサイトの統一感の維持にも効果的です。

タイトルとURLをコピーしました