Documentation
Contact Form 7 の送信データをCSVで出力する方法
Contact Form 7(CF7)の送信履歴をCSVで全件エクスポートする方法を解説。Excelで文字化けしないUTF-8 BOM付き出力のコツ、コード不要で設定画面だけで出力する方法と自前実装の比較を紹介。
問い合わせを集計・分析するなら、Contact Form 7(CF7)の送信履歴をCSVで出力してExcelで扱えると速いです。
だがCF7標準にCSV出力機能はなく、自前で書くとExcelでの文字化けにつまずきやすいです。
この記事ではコード不要で出力する方法と、自前実装のコツを解説します。
なぜCSV出力が必要か
問い合わせ件数の月次集計、流入元別の内訳、営業へのリスト共有——これらはCSVにしてExcelやスプレッドシートに取り込むのが一番早いです。
管理画面で1件ずつ見るより、全件を一括で書き出して並べ替え・ピボットした方が分析が進みます。
前提:送信データが保存されていること
CSV出力は、送信内容がデータベースに保存されていることが前提です。
まだの場合は先に 送信内容をデータベースに保存する方法 を済ませておきます。
方法1:設定画面だけで完結させる(コード不要・おすすめ)
functions.php を触らず、WordPress管理画面の操作だけで送信データをCSV出力できます。
Frontierline Forms を使えば、次の手順で完了します。
手順
- 保存を確認:送信データがDBに保存されている状態にします。
- 出力範囲を指定:管理画面でフォームや期間など出力範囲を選びます。
- CSVを書き出す:エクスポートを実行し、CSVをダウンロード。
- Excelで確認:文字化けせず各列が正しく分かれているか確認。
UTF-8 BOMの付与やカンマ・改行のエスケープはプラグインが処理するので、Excelでそのまま開けます。
方法2:自前でCSVを出力する(上級者向け)
自分でコードを書く場合、保存テーブルから SELECT した結果をCSVとして出力します。
Excelでの文字化けを防ぐには、先頭にUTF-8 BOMを付けるのがポイントです。
// 保存テーブルから取得して出力する例
$rows = $wpdb->get_results("SELECT created_at, name, email, message FROM {$wpdb->prefix}cf7_entries", ARRAY_A);
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="entries.csv"');
echo "\xEF\xBB\xBF"; // UTF-8 BOM(Excelの文字化け対策)
$out = fopen('php://output', 'w');
fputcsv($out, ['送信日時', '名前', 'メール', '内容']);
foreach ($rows as $r) {
fputcsv($out, $r);
}
fclose($out);
手動実装でつまずく点
- BOMなしでExcel文字化け:
\xEF\xBB\xBFを先頭に出さないと、Excelで日本語が崩れます。 - 改行・カンマのエスケープ:本文に改行やカンマが含まれると列がズレます。
fputcsvは基本対応するが、出力経路によっては手当てが要ります。 - 大量データでメモリ超過:全件を一度に配列へ載せると重いです。件数が多いと分割出力やストリーミングが必要になります。
- 出力トリガーと権限:管理画面のどこから・誰が出力できるかの導線と権限チェックを自前で用意する必要があります。
単発の書き出しなら自前でも作れるが、文字化け・エスケープ・権限を毎回手当てするより、ボタン1つで全件出せる方法1が確実です。
まとめ
CF7標準にCSV出力はないため、保存テーブルから自前で書き出すか、出力対応プラグインを使います。
自前実装はUTF-8 BOMやエスケープでつまずきやすいです。
設定だけで全件を文字化けなく出力したいなら、対応プラグインが速いです。
CSV全件出力に加え、送信ログのDB保存、Slack/Chatwork/スプレッドシート通知、マルチステップまで設定だけで実装したいなら、Frontierline Forms の導入を検討してください。
Frontierline Forms
この設定、管理画面のチェックだけで完了。
通知・送信ログ・CSV出力・マルチステップを、コードを書かず設定画面だけで実装。制作会社向けの5サイト/無制限ライセンスなら、複数案件のフォーム保守をまとめて巻き取れる。決済と同時にライセンスキーを即時発行。