2026年5月20日
2026年5月20日
Contact Form 7でファイルアップロードを設定する方法
はじめに
Contact Form 7のファイルアップロード機能を使うと、フォームからPDFや画像を受け取ることができます。許可する拡張子・最大ファイルサイズ・アップロード先の設定方法と、セキュリティ上の注意点を解説します。
症状・原因
- ファイルアップロードフィールドを追加したがエラーになる
- 「ファイルの種類が許可されていません」と表示される
- アップロードできるファイルサイズを大きくしたい
- アップロードされたファイルをメールに添付して受け取りたい
解決手順
ステップ1:フォームにファイルアップロードタグを追加する
フォーム編集画面で「ファイル」タグを挿入するか、直接記述します:
[file* your-file limit:5mb filetypes:pdf|doc|docx|jpg|png]
タグのオプション:
limit:5mb— 最大ファイルサイズ(kb/mb指定可)filetypes:pdf|jpg|png— 許可する拡張子(|で区切る)*— 必須フィールド
ステップ2:PHPのアップロードサイズ制限を引き上げる
; php.ini または .htaccess
upload_max_filesize = 20M
post_max_size = 25M
max_execution_time = 300
.htaccess での設定:
php_value upload_max_filesize 20M
php_value post_max_size 25M
ステップ3:許可する拡張子をフィルターで制御する
// functions.php — 許可するファイル拡張子を追加
add_filter('wpcf7_upload_file_types', function(array $types) {
$types[] = 'xlsx';
$types[] = 'csv';
return $types;
});
// 危険な拡張子を除外する
add_filter('wpcf7_upload_file_types', function(array $types) {
return array_diff($types, ['exe', 'php', 'js', 'sh']);
});
ステップ4:メールにファイルを添付する
CF7のメール設定タブで [your-file] タグをメール本文または添付ファイル欄に追加します:
メール設定 → 「添付ファイル」欄に [your-file] を追加
複数ファイルを添付する場合:
[file your-file-1 limit:10mb filetypes:pdf|jpg]
[file your-file-2 limit:10mb filetypes:pdf|jpg]
メール設定の添付ファイル欄:
[your-file-1]
[your-file-2]
ステップ5:アップロードされたファイルを保存する
CF7はデフォルトでファイルを一時ディレクトリに保存し、メール送信後に削除します。ファイルを保存するには Flamingo または独自フックを使います:
// functions.php — CF7送信後にアップロードファイルをコピー保存
add_action('wpcf7_before_send_mail', function(WPCF7_ContactForm $form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) return;
$uploaded = $submission->uploaded_files();
foreach ($uploaded as $field => $path) {
$dest = WP_CONTENT_DIR . '/uploads/cf7-files/' . basename($path);
@copy($path, $dest);
}
});
注意事項
.php.exe.jsなどの実行可能ファイルは必ず拒否リストに入れてください- アップロードディレクトリに
.htaccessを設置してPHP実行を禁止することを強く推奨します - ファイルの保存先ディレクトリには適切なパーミッション(755)を設定してください
まとめ
CF7のファイルアップロードは [file* your-file limit:5mb filetypes:pdf|jpg] タグで設定します。wpcf7_upload_file_types フィルターで許可拡張子を制御し、実行可能ファイルの除外とアップロードディレクトリのPHP実行禁止を必ず実施してください。