AI要約
はじめに
「通知」タブの「詳細設定」から「ファイルアップロード添付を有効にする」オプションを有効にした場合、メール通知内のファイルで元のファイル名を保持しますか?デフォルトでは、WPFormsはセキュリティ上の理由とファイル名の重複を避けるために、元のファイル名に英数字の文字列を追加します。しかし、このセキュリティレイヤーを削除したい場合は、PHPフィルターを使用して簡単に実現できます。このチュートリアルでは、その方法を詳しく説明します!
このスニペットはWordPressバージョン6.2でのみ使用できます。
フォームの作成
まず、新しいフォームを作成します。このドキュメントでは、レクリエーション野球チームが独自のチームシャツを注文するための簡単なサインアップシートを作成します。基本的な情報を含めますが、チームが独自のデザインをアップロードできるように「ファイルアップロード」フィールドも追加します。

フォームの作成についてサポートが必要な場合は、こちらの役立つガイドをご覧ください。
ファイル添付を含めるオプションを有効にする
フォームフィールドを追加したら、フォームビルダー内の「設定」タブをクリックします。次に、「通知」タブに移動し、下にスクロールして「詳細設定」を開きます。
「ファイルアップロード添付を有効にする」のボタンをオンに切り替え、添付ファイルを含めたいフィールドを選択します。このチュートリアルでは、「ファイルアップロード」フィールドは1つしかないので、このセクションにそのフィールドを追加するだけで済みます。

スニペットの追加
次に、このスニペットをサイトに追加します。スニペットをサイトに追加する方法についてサポートが必要な場合は、こちらのチュートリアルで詳細を確認してください。
このスニペットを追加すると、すべてのフォームとファイルアップロードに適用されることに注意してください。
/**
* Retain original file name on file uploads
*
* @link https://wpforms.com/developers/how-to-retain-the-original-file-name-for-file-uploads/
*/
function wpf_emails_send_email_data( $email, $email_obj ) {
if ( empty( $email[ 'attachments' ] ) ) {
return $email;
}
if ( ! isset( $email_obj->form_data, $email_obj->notification_id, $email_obj->fields ) ) {
return $email;
}
$form_data = $email_obj->form_data;
$notification_id = $email_obj->notification_id;
$entry_fields = $email_obj->fields;
if (
empty( $entry_fields ) ||
empty( $form_data[ 'settings' ][ 'notifications' ][ $notification_id ][ 'file_upload_attachment_enable' ] ) ||
empty( $form_data[ 'settings' ][ 'notifications' ][ $notification_id ][ 'file_upload_attachment_fields' ] )
) {
return $email;
}
$attachment_fields = $form_data[ 'settings' ][ 'notifications' ][ $notification_id ]['file_upload_attachment_fields'];
$entry_attachment_fields = [];
foreach ( $attachment_fields as $field_id ) {
if ( ! empty( $entry_fields[ $field_id ] ) ) {
$entry_field = $entry_fields[ $field_id ];
if ( ! empty( $entry_field[ 'style' ] ) && $entry_field[ 'style' ] === 'modern' ) {
foreach ( $entry_field[ 'value_raw' ] as $file ) {
$entry_attachment_fields[ $file[ 'file' ] ] = $file;
}
} else {
$entry_attachment_fields[ $entry_field['file'] ] = $entry_field;
}
}
}
$attachments = [];
foreach ( $email[ 'attachments' ] as $attachment ) {
$file_name = basename( $attachment );
if ( empty( $entry_attachment_fields[ $file_name ][ 'file_user_name' ] ) ) {
$attachments[] = $attachment;
continue;
}
$attachments[ $entry_attachment_fields[ $file_name ][ 'file_user_name' ] ] = $attachment;
}
$email[ 'attachments' ] = $attachments;
return $email;
}
add_filter( 'wpforms_emails_send_email_data', 'wpf_emails_send_email_data', 30, 2 );
このスニペットは、メールへの添付ファイルを検索し、ハッシュ化された文字列を追加する代わりに、アップロードされた元のファイル名を保持します。
これで、メール添付ファイルのファイル名が「theres-no-base-like-home-svg-8abdd7ea434445587fb0e1b560b137b1.png」のようになる代わりに、スニペットが追加された後の名前は「theres-no-base-like-home-svg.png」になります。

ファイル名は、サーバーからこれらのファイルをダウンロードするための正しいURLを手動で特定されるのを防ぎ、またファイル名の重複からファイルを保護するためにハッシュ化されています。このスニペットを使用すると、WPFormsが配置しているこれらのセキュリティ対策が無効になります。
これで完了です!PHPフィルターを使用して、メール通知のファイル添付の元のファイル名を正常に保持できました。訪問者が大きなファイルをアップロードするための時間を変更したいですか?モダンファイルアップロードのタイムアウトを変更する方法に関する記事をご覧ください。