朝起きて、昼休みに、夜寝る前に、何度も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つを数珠つなぎに連携させます。
- WordPress(データ元):REST APIを拡張し、指定されたページの「日・週・月・全」のPVを外部に吐き出す窓口を作ります。
- Make(司令塔):指定時間にWordPressの窓口へデータを一括リクエストし、バラバラのデータを1通の文章に合体させます。
- Gmail(送信役):できあがった文章をあなたのメールアドレス宛に送信します。
3. ステップ1:WordPress側のカスタマイズ(APIの拡張)
まずは、WordPressが外部(Make)に向けて「各ページのPV数」をパッと渡せるように、functions.php にコードを追加します。
このコードは、通常の投稿や固定ページだけでなく、カスタム投稿タイプ(例では c1 )のデータにも同時に対応し、Cocoonのデータベースから自動計算してAPIに組み込む強力なプログラムです。
⚠️ 導入時の重要な注意点(Cocoonユーザー向け)
通常、WordPressのカスタマイズは子テーマで行うのが鉄則ですが、Cocoonのアクセス集計データ(API拡張)に関しては、子テーマの functions.php では上手く動作しないケースがあります。
そのため、今回は「親テーマ(Cocoon)」の functions.php の最下部にコードを追記して検証・実装を行っています。親テーマをアップデートした際はコードが消えてしまうため、アップデート後に再追記するか、フックのタイミングを調整してください(バックアップもお忘れなく!)。
導入手順

- WordPress管理画面から「外観」➔「テーマファイルエディター」を開く。
- 右上の「編集するテーマを選択」で Cocoon(親テーマ) を選択。
- 右側の一覧から
functions.php(テーマのための関数)を選択。 - ファイルの最下部に以下のコードをコピペして保存する。
// 【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通のメールにまとめるため、以下の順番でモジュールを直列に並べるのがポイントです。
【モジュールの接続順】
- 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:スケジュールタイマーの起動
フローが完成したら、毎日決まった時間に勝手に動くようタイマーを設定します。
- Make画面の左にある 時計マーク をクリックします。
- Run scenario を Daily(毎日) に設定し、希望のレポート時間を指定して保存します。複数時刻をセットすることもできます。
- Run Onceボタンの右にあるスイッチを ON に切り替えます。
- シナリオを保存(フロッピーマークをクリック)します。
これで、完全自動の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を少し拡張するノウハウを組み合わせれば、プラグインに頼らなくても自分好みの便利な「マイアプリ」がいくらでも作れます。
アクセスチェックの時間を削減し、その分「次の素晴らしい記事を書く時間」に充てていきましょう!
コメント