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実行禁止を必ず実施してください。

お気軽にご相談ください

お見積りへ お問い合わせへ