【Cocoonユーザー必見!】プラグインなしで毎日のページ別 PV をメールに自動集計して届ける方法

朝起きて、昼休みに、夜寝る前に、何度もWordPressのダッシュボードを開いて PV を確認していませんか?
アクセスが気になって何度も画面を更新してしまう……この「PV気になりすぎ病」、ブロガーなら誰もが一度は経験があるはずです。

しかし、データを「自分から見に行く」のは時間の無駄。データの方から「勝手に届く」仕組みを作れば、サイト運営はもっと効率化できます。

今回、大人気テーマ「Cocoon」が持つ正確なアクセス統計データを活用し、毎日決まった時間にページ別のPVレポートを1通のメールにまとめて自動送信するシステムを構築しました。

既存のプラグインを使わず、WordPressの「REST API」とノーコードツール「Make(旧Integromat)」を組み合わせることで、完全無料でスマートに動作します。固定ページはもちろん、通常の方法では取得できない「カスタム投稿タイプ」の PV にも完全対応させた決定版のノウハウを、コードも設定手順もすべて公開します!


1. 今回作成する「完全自動PVレポート」の全貌

システムが完成すると、指定した時間(例:毎日夜21時)に、以下のようなレポートメールが自動で届くようになります。

お疲れ様です。本日のPV数をお知らせします。

【投稿のPV】
■ 記事タイトル: おすすめの〇〇レビュー
  ・今日のPV: 125 PV
---------------------------------
■ 記事タイトル: △△の活用方法
  ・今日のPV: 84 PV
---------------------------------

【固定ページのPV】
■ 記事タイトル: お問い合わせ
  ・今日のPV: 5 PV
---------------------------------
■ 記事タイトル: プロフィール
  ・今日のPV: 12 PV
---------------------------------

なぜ他のプラグインやGA4ではダメなのか?

  • プラグインの通知:海外製の通知プラグインはメールが英語で読みにくかったり、サイトの動作(データベース)を重くする原因になります。
  • Googleアナリティクス(GA4)連携:APIの仕様変更が激しく、設定や認証が非常に難解です。

今回の方法は、Cocoonがデータベース内に独自に保存している、最も正確なアクセスログ(wp_cocoon_accesses テーブル)から直接数字を計算するため、サイトを重くすることなく、100%正確な数字を引っ張ってくることができます。


2. 全体の設計図(どうやって動いているの?)

仕組みは非常にシンプルで、以下の3つを数珠つなぎに連携させます。

  1. WordPress(データ元):REST APIを拡張し、指定されたページの「日・週・月・全」のPVを外部に吐き出す窓口を作ります。
  2. Make(司令塔):指定時間にWordPressの窓口へデータを一括リクエストし、バラバラのデータを1通の文章に合体させます。
  3. Gmail(送信役):できあがった文章をあなたのメールアドレス宛に送信します。

3. ステップ1:WordPress側のカスタマイズ(APIの拡張)

まずは、WordPressが外部(Make)に向けて「各ページのPV数」をパッと渡せるように、functions.php にコードを追加します。

このコードは、通常の投稿や固定ページだけでなく、カスタム投稿タイプ(例では c1のデータにも同時に対応し、Cocoonのデータベースから自動計算してAPIに組み込む強力なプログラムです。

⚠️ 導入時の重要な注意点(Cocoonユーザー向け)

通常、WordPressのカスタマイズは子テーマで行うのが鉄則ですが、Cocoonのアクセス集計データ(API拡張)に関しては、子テーマの functions.php では上手く動作しないケースがあります。
そのため、今回は「親テーマ(Cocoon)」の functions.php の最下部にコードを追記して検証・実装を行っています。親テーマをアップデートした際はコードが消えてしまうため、アップデート後に再追記するか、フックのタイミングを調整してください(バックアップもお忘れなく!)

導入手順

  1. WordPress管理画面から「外観」➔「テーマファイルエディター」を開く。
  2. 右上の「編集するテーマを選択」で Cocoon(親テーマ) を選択。
  3. 右側の一覧から functions.php(テーマのための関数)を選択。
  4. ファイルの最下部に以下のコードをコピペして保存する。
// 【Cocoon専用】wp_cocoon_accessesから投稿・固定ページのPVを自動計算してAPIに出力する
add_action('rest_api_init', 'register_cocoon_final_calculated_pv');
function register_cocoon_final_calculated_pv() {
    // 通常の「投稿(post)」と「固定ページ(page)」を対象にする
    foreach (array('post', 'page') as $post_type) {
        register_rest_field($post_type, 'cocoon_pv_report', array(
            'get_callback' => function($post_array) {
                global $wpdb;
                $post_id = $post_array['id'];
                $table_name = $wpdb->prefix . 'cocoon_accesses';
                
                // 現在の「今日」「7日前」「30日前」の日付を取得(WordPressの時間設定に合わせる)
                $current_time = current_time('mysql');
                $today_date   = current_time('Y-m-d');
                $seven_days_ago  = date('Y-m-d', strtotime('-7 days', strtotime($current_time)));
                $thirty_days_ago = date('Y-m-d', strtotime('-30 days', strtotime($current_time)));
                
                // 1. 本日のPV数(今日の日付の count を合計)
                $daily_pv = $wpdb->get_var($wpdb->prepare(
                    "SELECT SUM(count) FROM $table_name WHERE post_id = %d AND date = %s",
                    $post_id, $today_date
                ));
                
                // 2. 今週のPV数(過去7日間の count を合計)
                $weekly_pv = $wpdb->get_var($wpdb->prepare(
                    "SELECT SUM(count) FROM $table_name WHERE post_id = %d AND date >= %s",
                    $post_id, $seven_days_ago
                ));
                
                // 3. 今月のPV数(過去30日間の count を合計)
                $monthly_pv = $wpdb->get_var($wpdb->prepare(
                    "SELECT SUM(count) FROM $table_name WHERE post_id = %d AND date >= %s",
                    $post_id, $thirty_days_ago
                ));
                
                // 4. 全体のPV数(その記事のすべての count を合計)
                $overall_pv = $wpdb->get_var($wpdb->prepare(
                    "SELECT SUM(count) FROM $table_name WHERE post_id = %d",
                    $post_id
                ));
                
                // データが空(null)の場合は 0 に変換して返す
                return array(
                    'source'     => 'cocoon_calculated_success',
                    'daily_pv'   => $daily_pv ? (int)$daily_pv : 0,
                    'weekly_pv'  => $weekly_pv ? (int)$weekly_pv : 0,
                    'monthly_pv' => $monthly_pv ? (int)$monthly_pv : 0,
                    'overall_pv' => $overall_pv ? (int)$overall_pv : 0
                );
            },
            'schema' => null,
        ));
    }
}

4. ステップ2:Make(旧Integromat)でのデータ集計フロー構築

次に、ノーコードツール「Make」を使って、データを一本道(直列)で繋ぐシナリオを構築します。複数のデータソースを1通のメールにまとめるため、以下の順番でモジュールを直列に並べるのがポイントです。

【モジュールの接続順】

  1. HTTP (投稿用) ➔ 2. Iterator (投稿用) ➔ 3. Text Aggregator (投稿用) ➔ 4. HTTP (固定ページ用) ➔ 5. Iterator (固定ページ用) ➔ 6. Text Aggregator (固定ページ用) ➔ 7. Gmail

① HTTPモジュールの設定(データ取得)

WordPressのREST APIは、初期設定では1リクエストあたり10件までしかデータを返しません。記事数が多い場合は、URLの末尾に「最大100件まで取得する」というパラメータ(per_page=100)を付与して制限を回避します。

  • 通常の投稿(posts)用URL: https://あなたのサイト.com/wp-json/wp/v2/posts?per_page=100
  • 固定ページ(pages)用URL: https://あなたのサイト.com/wp-json/wp/v2/pages?per_page=100

※ どちらのモジュールも「Parse response」の設定項目は必ず Yes に設定してください。

② IteratorとText Aggregatorの設定(文章の組み立て)

取得した複数記事のデータを、読みやすいテキストに合体させます。
Text Aggregatorモジュールの「Row content」欄に以下のように記述し、先ほど拡張したカスタムフィールドから対応するパーツをマウスで選んで配置します。

■ 記事タイトル: [title ➔ rendered]
  ・今日のPV: [cocoon_pv_report ➔ daily_pv] PV
---------------------------------

③ Gmailモジュールの設定(2つのデータを合体)

最後のGmailモジュールの「Content(本文)」欄に、1つ目(投稿用・モジュール3)と2つ目(固定ページ用・モジュール6)のText Aggregatorから生成されたテキストパーツ(text)をそれぞれ並べて配置します。

お疲れ様です。本日のPV数をお知らせします。

【投稿ページのPV】
[3.text]

【固定ページのPV】
[6.text]

5. ステップ3:スケジュールタイマーの起動

フローが完成したら、毎日決まった時間に勝手に動くようタイマーを設定します。

  1. Make画面の左にある 時計マーク をクリックします。
  2. Run scenario を Daily(毎日) に設定し、希望のレポート時間を指定して保存します。複数時刻をセットすることもできます。
  3. Run Onceボタンの右にあるスイッチを ON に切り替えます。
  4. シナリオを保存(フロッピーマークをクリック)します。

これで、完全自動のPVレポートアプリがバックグラウンドで稼働し始めます!


💡 【応用編】カスタム投稿タイプも一緒に出したい場合は?

もしブログ内でカスタム投稿タイプ(例:レビュー用、ポートフォリオ用など。ここでは仮に「c1」とします)を使っている場合も、簡単にこのシステムへ組み込むことができます。

1. functions.php の書き換え

先ほど親テーマに貼り付けたコードの5行目あたりにある、配列の指定部分を以下のようにカスタム投稿タイプ名(c1)を追加した形に変更するだけです。

// (変更前)
foreach (array('post', 'page') as $post_type) {

// (変更後:カスタム投稿「c1」を追加する場合)
foreach (array('post', 'page', 'c1') as $post_type) {

2. Makeのモジュールを増やす

Makeの画面で、すでに作成した「HTTP」「Iterator」「Text Aggregator」の3つのモジュールを丸ごと複製し、繋いでいる一本道の途中に挟み込みます。HTTPのURLを https://あなたのサイト.com/wp-json/wp/v2/c1?per_page=100 と指定すれば、同様にメール本文へ綺麗に合体させることが可能です。


6. まとめ:自動化で「本当に価値のある時間」を作ろう

この仕組みを導入してから、1日に何度もWordPressのダッシュボードを開いて一喜一憂する無駄な時間が完全にゼロになりました。夜に届くメールをサラッと確認するだけで、どの記事が読まれているのかが完璧に把握できます。

iPaaS(Make)とWordPressのREST APIを少し拡張するノウハウを組み合わせれば、プラグインに頼らなくても自分好みの便利な「マイアプリ」がいくらでも作れます。

アクセスチェックの時間を削減し、その分「次の素晴らしい記事を書く時間」に充てていきましょう!

コメント

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