Achtung!

Dieser Artikel enthält PHP-Code und richtet sich an Entwickler. Wir stellen diesen Code als Service zur Verfügung, bieten jedoch keine Unterstützung für Codeanpassungen oder die Entwicklung durch Dritte.

Für zusätzliche Hilfe siehe das Tutorial von WPBeginner zum Hinzufügen von benutzerdefiniertem Code.

Schließen

Ursprünglichen Dateinamen für Datei-Uploads beibehalten

Einleitung

Möchten Sie den ursprünglichen Dateinamen für Dateien in den E-Mail-Benachrichtigungen beibehalten, wenn Sie die Option Dateianhang-Uploads aktivieren aus den Erweiterten Optionen im Tab Benachrichtigungen aktiviert haben? Standardmäßig fügt WPForms eine Zeichenkette aus Buchstaben und Zahlen zum ursprünglichen Dateinamen hinzu, um die Sicherheit zu gewährleisten und doppelte Dateinamen zu vermeiden. Wenn Sie diese Sicherheitsebene jedoch entfernen möchten, können Sie dies einfach mit einem PHP-Filter erreichen. In diesem Tutorial zeigen wir Ihnen genau, wie das geht!

Dieser Ausschnitt kann nur für WordPress Version 6.2 verwendet werden.

Erstellung des Formulars

Wir beginnen mit der Erstellung eines neuen Formulars. Für diese Dokumentation erstellen wir ein einfaches Anmeldeformular für ein Freizeitsport-Baseballteam, um deren eigene Team-Trikots zu bestellen. Wir werden einige grundlegende Informationen abfragen, aber auch ein Feld für den Datei-Upload hinzufügen, damit die Teams ihre eigenen Designs hochladen können.

Beginnen Sie mit der Erstellung Ihres Formulars und dem Hinzufügen Ihrer Felder.

Wenn Sie Hilfe beim Erstellen Ihres Formulars benötigen, sehen Sie sich bitte diesen hilfreichen Leitfaden an.

Aktivieren der Option zum Einbeziehen des Dateianhangs

Sobald die Formularfelder hinzugefügt wurden, klicken Sie im Formular-Builder auf den Tab Einstellungen. Gehen Sie dann zum Tab Benachrichtigungen und scrollen Sie nach unten, um die Erweiterten Optionen zu öffnen.

Klicken Sie, um den Schalter für Dateianhang-Uploads aktivieren umzulegen und wählen Sie die Felder aus, für die Sie die Anhänge einschließen möchten. In diesem Tutorial haben wir nur ein Datei-Upload-Feld, daher müssen wir dieses Feld nur zu diesem Abschnitt hinzufügen.

Öffnen Sie im Tab „Benachrichtigungen“ die erweiterten Einstellungen und klicken Sie auf die Schaltfläche, um „Upload-Anhänge aktivieren“ zu aktivieren.

Hinzufügen des Snippets

Als Nächstes fügen wir den Ausschnitt zu unserer Website hinzu. Wenn Sie Hilfe beim Hinzufügen von Ausschnitten zu Ihrer eigenen Website benötigen, finden Sie weitere Informationen in diesem Tutorial.

Bitte beachten Sie, dass dieser Ausschnitt für alle Formulare und Datei-Uploads gilt.

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

Dieser Ausschnitt sucht nach Anhängen in der E-Mail und behält anstelle der gehashten Zeichenkette den ursprünglichen Dateinamen bei, der hochgeladen wurde.

Anstatt dass unsere E-Mail-Anhangsdatei nun einen Dateinamen wie theres-no-base-like-home-svg-8abdd7ea434445587fb0e1b560b137b1.png hat, wird der Name nach dem Hinzufügen des Ausschnitts theres-no-base-like-home-svg.png lauten.

Nachdem der Ausschnitt hinzugefügt wurde, ist der Dateianhang der ursprüngliche Dateiname.

Der Dateiname wird gehasht, um zu verhindern, dass die korrekten URLs zum Herunterladen dieser Dateien vom Server manuell ermittelt werden, und um doppelte Dateinamen zu vermeiden. Die Verwendung dieses Ausschnitts hebt diese von WPForms implementierten Sicherheitsmaßnahmen auf.

Und das war's! Sie haben erfolgreich einen PHP-Filter verwendet, um den ursprünglichen Dateinamen für Dateianhänge in Ihren E-Mail-Benachrichtigungen beizubehalten. Möchten Sie auch die Zeit ändern, die Ihre Besucher für den Upload größerer Dateien haben? Schauen Sie sich unseren Artikel über Ändern des Timeouts für den modernen Datei-Upload an.