Documentation
Contact Form 7 の送信内容をデータベースに保存する方法
Contact Form 7(CF7)は標準では送信内容を保存しない。フォーム送信をデータベースに保存し管理画面で履歴を一覧する方法を解説。コード不要で設定画面だけで保存する方法と、自前実装の方法を比較。
Contact Form 7(CF7)は、標準では送信内容を一切保存しない。
メール通知が文字化けしたり迷惑メール判定で消えたりすると、問い合わせ内容が丸ごと失われます。
「先週、誰から何が届いた?」に答えられません。
送信をデータベースに保存して管理画面で履歴を残せば、この取りこぼしをゼロにできます。
なぜ送信内容のDB保存が必要か
メールは消えます。
サーバーの送信失敗、Gmail側の迷惑メール振り分け、担当者の誤削除——どれが起きても、保存していなければ復旧できません。
重要なリードや見積もり依頼を失うのは事業の直接的な損失です。
DBに残しておけば、メールと二重で記録が残り、後から検索・集計もできます。
方法1:設定画面だけで完結させる(コード不要・おすすめ)
functions.php を触らず、WordPress管理画面の設定だけで送信内容をDB保存できます。
Frontierline Forms を使えば、次の手順で完了します。
手順
- 保存を有効化:設定で送信内容のデータベース保存をオンにします。
- 保存項目を確認:名前・メール・内容・送信日時など、保存される項目を確認。
- 履歴を一覧:管理画面の一覧から送信履歴を検索・閲覧します。
- テスト送信:フォームを送信し、一覧に記録が追加されるか確認。
保存先テーブルの設計やサニタイズはプラグインが処理するので、コードの保守が要りません。
保存した履歴はそのまま CSV全件出力 で書き出せます。
方法2:wpcf7_before_send_mail で自前実装する(上級者向け)
自分でコードを書く場合、CF7の wpcf7_before_send_mail フックで送信データを受け取り、カスタムテーブルへ保存します。
add_action('wpcf7_before_send_mail', function ($form) {
global $wpdb;
$submission = WPCF7_Submission::get_instance();
$data = $submission ? $submission->get_posted_data() : [];
$wpdb->insert($wpdb->prefix . 'cf7_entries', [
'created_at' => current_time('mysql'),
'name' => sanitize_text_field($data['your-name'] ?? ''),
'email' => sanitize_email($data['your-email'] ?? ''),
'message' => sanitize_textarea_field($data['your-message'] ?? ''),
]);
});
事前に dbDelta() で保存用テーブルを作っておく必要があります。
手動実装でつまずく点
- テーブル設計と作成が必要:プラグイン有効化時に
dbDelta()でテーブルを作る処理を別途書きます。 - 一覧・検索UIを自作:保存しただけでは閲覧できません。管理画面に一覧・検索・詳細表示を自前で実装する手間が大きいです。
- サニタイズ漏れのリスク:入力値の無害化を怠ると、保存値の表示時にXSSなどの脆弱性になります。
保存は数行でも、閲覧UIまで作ると一気に重くなります。
実用に耐える管理画面を自作するより、設定で完結する方法1が現実的です。
Lite版とPro版の違い
| Lite(無料) | Pro | |
|---|---|---|
| 保存件数 | 全件・永続 | 全件・永続 |
| 検索・絞り込み | ○ | ○ |
| CSV出力(全件) | ○ | ○ |
| 暗号化保存 | ― | ○ |
保存・一覧・CSV出力までは無料で完結。
送信データの暗号化保存や外部通知・自動返信が必要ならPro版へ。
まとめ
CF7は標準で送信内容を保存しないため、メール不達で内容が消えるリスクがあります。wpcf7_before_send_mail での自前実装も可能だが、閲覧UIの自作が重いです。
設定だけで保存・一覧・出力まで完結させたいなら、対応プラグインが速いです。
保存・一覧・CSV出力は無料で試せます。
送信ログのDB保存に加え、CSV全件出力、Slack/Chatwork/スプレッドシート通知、マルチステップまで設定だけで実装したいなら、Frontierline Forms の導入を検討してください。
Frontierline Forms
この設定、管理画面のチェックだけで完了。
通知・送信ログ・CSV出力・マルチステップを、コードを書かず設定画面だけで実装。制作会社向けの5サイト/無制限ライセンスなら、複数案件のフォーム保守をまとめて巻き取れる。決済と同時にライセンスキーを即時発行。