Contact Form 7の問い合わせをGoogleスプレッドシートに自動保存する方法〜コピペで実装できる完全ガイド〜

Contact Form 7の問い合わせをスプレッドシートに自動保存する方法

WordPressでサイトを運営していると、Contact Form 7でお問い合わせフォームを設置することが多いと思います。

しかし、こんな悩みはありませんか?

  • メールだけだと後から探すのが大変
  • 対応状況を管理できない
  • チームで共有しづらい
  • 問い合わせ履歴を分析できない

この記事では、Contact Form 7の送信内容をGoogleスプレッドシートに自動で保存する仕組みを解説します。

この記事で解決できること

  • 問い合わせ内容がスプレッドシートに自動で蓄積される
  • 対応状況をチームで共有・管理できる
  • 問い合わせデータの分析が可能になる

想定読者

  • WordPressでサイトを運営している方
  • Contact Form 7を使っている方
  • プログラミングは苦手だがコピペならできる方

実案件での実績

この実装はクライアントのコーポレートサイト案件で実際に構築したものです。導入後、問い合わせ管理の工数が月5時間→30分に削減できました。


目次

全体の仕組みをざっくり理解しよう

まずは難しいことを考えず、流れだけ把握しましょう。

STEP
お客様がフォームを送信
STEP
WordPressが内容を受け取る
STEP
PHPがGASのURLにデータを送信
STEP
GASがスプレッドシートに自動保存

やっていることはとてもシンプルです。

今回使うもの

ツール役割
Contact Form 7WordPressの無料フォームプラグイン
Googleスプレッドシート問い合わせの保存先(Excelのクラウド版)
Google Apps Script(GAS)データを受け取ってシートに書き込む係
PHP(functions.php)フォーム送信時にGASへデータを送る役目

難しそうに見えますが、コードはすべてコピペでOKです。


ステップ1:スプレッドシートを用意する

まずは、問い合わせを保存する「箱」を作ります。

手順

  1. Googleスプレッドシートにアクセス
  2. 「空白のスプレッドシート」を新規作成
  3. シート名を「お問い合わせ」に変更
  4. 1行目に以下の列名を入力

シート例(お問い合わせ)

A列B列C列D列E列F列G列
受信日時お名前メール電話会社名種別内容

列名は日本語でOKです。あとから見て分かることが大切です


ステップ2:Google Apps Scriptを作成する

次に、データを受け取る係(GAS)を作ります。

手順

  1. スプレッドシートを開いた状態で、上のメニューから 「拡張機能 → Apps Script」 をクリック
  2. 表示されたエディタで、既存のコードをすべて削除
  3. 以下のコードを貼り付ける

GASコード

/**
 * Contact Form 7からのデータを受け取り、スプレッドシートに保存する
 * POSTリクエストを処理する関数
 */
function doPost(e) {
  try {
    // POSTされたJSONデータを解析
    var data = JSON.parse(e.postData.contents);

    // アクティブなスプレッドシートを取得
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('お問い合わせ');

    // 現在の日時を取得(日本時間)
    var timestamp = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');

    // シートに1行追加
    // 列の順番:受信日時, お名前, メール, 電話, 会社名, 種別, 内容
    sheet.appendRow([
      timestamp,           // A列:受信日時
      data.name || '',     // B列:お名前
      data.email || '',    // C列:メール
      data.tel || '',      // D列:電話
      data.company || '',  // E列:会社名
      data.type || '',     // F列:種別
      data.message || ''   // G列:内容
    ]);

    // 成功レスポンスを返す
    return ContentService.createTextOutput(
      JSON.stringify({ result: 'success' })
    ).setMimeType(ContentService.MimeType.JSON);

  } catch (error) {
    // エラーレスポンスを返す
    return ContentService.createTextOutput(
      JSON.stringify({ result: 'error', message: error.toString() })
    ).setMimeType(ContentService.MimeType.JSON);
  }
}

/**
 * GETリクエストへの応答(動作確認用)
 */
function doGet(e) {
  return ContentService.createTextOutput('GAS is working!');
}
  1. Ctrl + S(Macは Cmd + S)で保存
  2. プロジェクト名を「CF7連携」などに変更

GASの役割を超ざっくり言うと

「WordPressから送られてきたデータを、決められたシートに書き込む」

それだけです。


ステップ3:GASをWebアプリとして公開する

GASはそのままだと外部から使えません。「公開」の設定が必要です。

手順

  1. GASエディタ右上の 「デプロイ」→「新しいデプロイ」 をクリック
  2. 歯車アイコンをクリックし、「ウェブアプリ」 を選択
  3. 以下の設定を行う

設定ポイント(超重要)

項目設定値
説明CF7連携(任意)
実行するユーザー自分
アクセスできるユーザー全員
  1. 「デプロイ」 ボタンをクリック
  2. 表示される ウェブアプリのURL をコピーして保存

⚠️ 重要: 「アクセスできるユーザー」を「全員」にしないと、WordPressからアクセスできません。実装時に「GASのデプロイ設定」でハマりました。ここを間違えると外部から呼び出せません。


ステップ4:WordPress側で送信処理を書く

次はWordPressです。Contact Form 7には、フォームが送信された瞬間に動く仕組み(フック)があります。

手順

  1. WordPress管理画面から 「外観」→「テーマファイルエディター」 を開く
  2. functions.php を選択
  3. ファイルの末尾に以下のコードを追加

PHPコード

<?php
/**
 * Contact Form 7の送信内容をGoogleスプレッドシートに保存
 *
 * @param WPCF7_ContactForm $contact_form フォームオブジェクト
 */
function send_cf7_to_spreadsheet($contact_form) {

    // フォームIDを確認(管理画面URLの post=XXXX の数字)
    $form_id = $contact_form->id();

    // 対象フォームのIDを指定(複数ある場合は配列で管理)
    $target_forms = array(
        1602,  // お問い合わせフォームのID
        // 1603,  // 無料相談フォームのID(必要に応じて追加)
    );

    // 対象フォーム以外は処理しない
    if (!in_array($form_id, $target_forms)) {
        return;
    }

    // 送信されたデータを取得
    $submission = WPCF7_Submission::get_instance();
    if (!$submission) {
        return;
    }

    $posted_data = $submission->get_posted_data();

    // GASに送信するデータを整形
    $data = array(
        'name'    => isset($posted_data['your-name']) ? $posted_data['your-name'] : '',
        'email'   => isset($posted_data['your-email']) ? $posted_data['your-email'] : '',
        'tel'     => isset($posted_data['your-tel']) ? $posted_data['your-tel'] : '',
        'company' => isset($posted_data['your-company']) ? $posted_data['your-company'] : '',
        'type'    => isset($posted_data['your-type']) ? $posted_data['your-type'] : '',
        'message' => isset($posted_data['your-message']) ? $posted_data['your-message'] : '',
    );

    // GASのウェブアプリURL(デプロイ時に取得したURL)
    $gas_url = 'https://script.google.com/macros/s/XXXXXXXXXX/exec';  // ← ここを自分のURLに変更

    // GASにPOSTリクエストを送信
    $response = wp_remote_post($gas_url, array(
        'method'  => 'POST',
        'headers' => array('Content-Type' => 'application/json'),
        'body'    => json_encode($data),
        'timeout' => 30,
    ));

    // エラーログ(デバッグ用、本番では削除可)
    if (is_wp_error($response)) {
        error_log('GAS送信エラー: ' . $response->get_error_message());
    }
}

// Contact Form 7の送信完了後に実行
add_action('wpcf7_mail_sent', 'send_cf7_to_spreadsheet');
  1. 「ファイルを更新」 をクリックして保存

$gas_url の部分は、ステップ3で取得した自分のGAS URLに必ず変更してください。


ハマりやすいポイント

実装時に詰まりやすいポイントと解決策をまとめました。

1. フォームIDの種類を間違える

Contact Form 7には 2種類のID があります。

ID見つけ方使える場所
投稿ID(数字)管理画面URLの post=1602PHPで使用 ✅
ハッシュID

エラー: コンタクトフォームが見つかりません。

ショートコード用 ❌

⚠️ PHPではハッシュIDは使えません。 管理画面URLに表示される数字のIDを使ってください。多くの人がここでつまずきます。

2. GASのデプロイ設定ミス

よくあるミス正しい設定
アクセス権が「自分のみ」「全員」に変更
新しいデプロイを作っていないコード変更後は必ず「新しいデプロイ」

3. フォームのname属性が違う

PHPコード内の $posted_data['your-name'] は、Contact Form 7で設定した name属性 と一致している必要があります。

フォームタグを確認してください:

[text* your-name]  ← name属性は「your-name」
[email* your-email]  ← name属性は「your-email」

4. スプレッドシートに書き込まれない場合のチェックリスト

  •  GASのデプロイ設定は「全員」になっているか
  •  GASのURLは正しくコピーされているか
  •  PHPのフォームIDは正しい数字になっているか
  •  フォームのname属性とPHPのキーは一致しているか
  •  スプレッドシートのシート名は「お問い合わせ」になっているか

なぜこの方法がおすすめなのか

1. とにかく安定する

  • Googleフォームを使った方法より壊れにくい
  • 仕様変更の影響を受けにくい
  • サーバー間通信で確実にデータが届く

2. 拡張しやすい

この仕組みを土台にして、以下の機能を後から追加できます:

  • GoogleChatへの通知
  • AppSheetと連携
  • 対応ステータス管理(未対応/対応中/完了)
  • 自動返信メールのログ記録
  • 月次レポートの自動生成

3. 実務で使える

  • 個人事業主の問い合わせ管理
  • 中小企業の顧客対応履歴
  • 制作会社の案件管理

どの現場でも通用する仕組みです。この仕組みを導入したクライアントからは「Excelで管理していた頃より圧倒的に楽になった」と好評でした。


よくある質問

プログラミング初心者でもできますか?

できます。
ほぼコピペで構築できます。変更が必要なのは「GASのURL」と「フォームID」の2箇所だけです。

無料ですか?

はい、無料です。

WordPress、Contact Form 7、Googleスプレッドシート、GASすべて無料で使えます。

データは安全ですか?

Googleアカウント内に保存されるので、Excel添付メールより安全です。

アクセス権限はスプレッドシートの共有設定で細かく管理できます。

複数のフォームに対応できますか?

できます。

PHPコードの $target_forms 配列にIDを追加し、GASでシートを分ける処理を追加すれば対応可能です。

まとめ

Contact Form 7とGoogleスプレッドシートを連携すると、以下のメリットがあります:

  • ✅ 問い合わせ管理が楽になる
  • ✅ チーム共有がしやすくなる
  • ✅ 業務効率が大きく上がる
  • ✅ データの分析・活用が可能になる

「フォームは作ったけど、その後の管理が大変」という方に、特におすすめの仕組みです。

実装にかかる時間の目安は 30分〜1時間 程度。一度構築すれば、あとは自動で問い合わせが蓄積されていきます。

目次