Wie man eine Datei aus der Mediathek automatisiert über Contact-Form 7 versendet und dabei verhindert, dass die Datei anschließend gelöscht wird.

Über den 'wpcf7_before_send_mail'
-Hook lässt sich was über Contact-Form-7 versendet wird (und daneben noch alles veranlasst werden soll) modifizieren. So ist es auch kein Problem festzulegen, eine Datei, deren ID z.B. in einem benutzerdefinierten Feld definiert ist, an die E-Mail des Absenders einer Nachricht zu hängen. Das funktioniert über denselben Mechanismus, über den eine Datei die über das Formular hochgeladen wird, zum E-Mail-Anhang wird.
Allerdings war die Datei im Anschluss dann weg. Die Lösung bestand darin, eine temporäre Kopie der Datei anzulegen, und diese anstelle des Originals an die E-Mail zu hängen.
Beispiel, wie man ein Attachment aus Custom-Field-Daten an ein Formular hängt
function my_theme_attach_pdf($cf7) {
/* Check Form ID */
if ( $cf7->id() == '42' ) {
$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
/* ID des Posts von dem aus das Formular versendet wird ermitteln */
$unit_tag = $submission->get_meta( 'unit_tag' );
if ( preg_match( '/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $unit_tag, $matches ) ) {
$post_id = absint( $matches[2] ); /* Post ID */
}
/* ID des Anhangs ermitteln */
$attachment_id = get_post_meta( $post_id, 'my_attachment_id_custom_field', true );
if ( !empty( $attachment_id ) ) {
$mail_subject = 'Text für Betreff';
$mail_body = 'Content der E-Mail';
$mail1 = $cf7->prop('mail');
$mail1['subject'] = $mail_subject;
$mail2 = $cf7->prop('mail_2');
$mail2['subject'] = $mail_subject;
$mail2['body'] = $mail_body;
/* Dateinendung des Attachments extrahieren */
$extension = pathinfo( get_attached_file( $attachment_id ), PATHINFO_EXTENSION );
$title = get_the_title( $attachment_id );
$attname = sanitize_title( $title );
$attachment = get_attached_file( $attachment_id );
$uploads = wp_upload_dir();
$time = date('d-m-Y-h-i-s');
/* Name für temporäre Kopie definieren */
$attach = $uploads['path'] . '/' . $attname . '-' . $time . '.' . $extension;
/* temporäre Kopie */
copy( $attachment, $attach );
/* Attachment anhängen */
$submission->add_uploaded_file( 'pdf', $attach );
$mail2['attachments'] .= '[pdf]';
/* ggf. Erfolgsnachricht modifzieren */
$messages=$cf7->prop('messages');
$messages['mail_sent_ok'] = 'Die Datei wurde versendet';
$cf7->set_properties( array( 'mail' => $mail1 ) );
$cf7->set_properties( array( 'mail_2' => $mail2 ) );
/* für Debugging: ch7-Objekt in Textdatei schreiben */
// file_put_contents( get_template_directory() . '/cf7-logfile.txt',print_r($cf7,1), LOCK_EX );
}
}
}
}
add_action( 'wpcf7_before_send_mail', 'my_theme_attach_pdf' );
Code-Sprache: PHP (php)