Attention !

Cet article contient du code PHP et est destiné aux développeurs. Nous fournissons ce code à titre de courtoisie, mais nous n'offrons pas de support pour les personnalisations de code ou le développement tiers.

Pour obtenir de l'aide supplémentaire, veuillez consulter le tutoriel de WPBeginner sur l'ajout de code personnalisé.

Ignorer

Comment conserver le nom de fichier d'origine pour les téléversements de fichiers

Introduction

Souhaitez-vous conserver le nom de fichier d'origine des fichiers dans les notifications par e-mail lorsque vous avez activé l'option Activer les pièces jointes de téléversement de fichiers dans les options Avancées de l'onglet Notifications ? Par défaut, WPForms ajoutera une chaîne de lettres et de chiffres au nom de fichier d'origine à des fins de sécurité et en cas de doublons de noms de fichiers. Cependant, si vous souhaitez supprimer cette couche de sécurité, vous pouvez facilement y parvenir avec un filtre PHP. Dans ce tutoriel, nous vous montrerons exactement comment faire !

Ce extrait ne peut être utilisé qu'avec la version 6.2 de WordPress.

Création du formulaire

Nous allons commencer par créer un nouveau formulaire. À des fins de documentation, nous créons une simple feuille d'inscription pour une équipe de baseball amateur afin qu'elle puisse commander ses propres maillots. Nous aurons des informations de base, mais nous ajouterons également un champ Téléversement de fichier pour permettre aux équipes de téléverser leur propre design.

commencez par créer votre formulaire et ajouter vos champs.

Si vous avez besoin d'aide pour créer votre formulaire, veuillez consulter ce guide utile.

Activation de l'option pour inclure la pièce jointe

Une fois les champs du formulaire ajoutés, cliquez sur l'onglet Paramètres dans le constructeur de formulaire. Ensuite, allez à l'onglet Notifications et faites défiler vers le bas pour ouvrir les options Avancées.

Cliquez pour activer le bouton Activer les pièces jointes de téléversement de fichiers et sélectionnez les champs pour lesquels vous souhaitez inclure les pièces jointes. Dans ce tutoriel, nous n'avons qu'un seul champ Téléversement de fichier, nous devons donc simplement ajouter ce champ à cette section.

Depuis l'onglet Notifications, ouvrez Avancé et cliquez sur le bouton pour Activer les pièces jointes des téléchargements

Ajout du snippet

Ensuite, nous allons ajouter l'extrait à notre site. Si vous avez besoin d'aide pour ajouter des extraits à votre propre site, consultez ce tutoriel pour plus d'informations.

Veuillez noter qu'en ajoutant cet extrait, il sera le même pour tous les formulaires et tous les téléversements de fichiers.

/**
 * 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 );

Cet extrait recherchera toutes les pièces jointes à l'e-mail et, au lieu d'ajouter la chaîne hachée, il conservera le nom de fichier d'origine qui a été téléversé.

Maintenant, au lieu que notre fichier joint à l'e-mail ait un nom de fichier comme theres-no-base-like-home-svg-8abdd7ea434445587fb0e1b560b137b1.png, le nom après l'ajout de l'extrait sera theres-no-base-like-home-svg.png.

une fois l'extrait ajouté, la pièce jointe du nom de fichier sera le nom de fichier d'origine.

Le nom de fichier est haché pour empêcher de découvrir manuellement les URL correctes pour télécharger ces fichiers depuis le serveur, ainsi que pour protéger les fichiers contre les doublons de noms. L'utilisation de cet extrait annulera ces mesures de sécurité mises en place par WPForms.

Et voilà ! Vous avez utilisé avec succès un filtre PHP pour conserver le nom de fichier d'origine des pièces jointes dans vos notifications par e-mail. Souhaitez-vous également modifier le temps dont disposent vos visiteurs pour téléverser des fichiers volumineux ? Consultez notre article sur Comment modifier le délai d'expiration du téléversement de fichiers moderne.