When this is active, attachments sent trough Contact Form 7 shortcode [file ] will be stored in your Media Library
As of April 2026, Store file uploads for Contact Form 7 is a WordPress file plugin with 1.0K+ active installations and a 5/5 rating from 6 reviews. It has been downloaded 13K+ times in total. Requires WordPress 4.9+ and PHP false+. Available on WordPress.org since 2020. Last updated 1 year ago — may have compatibility concerns. Downloads are down 25% this week. Top alternative: Theme Editor.
By default, Contact Form 7 dose not keep data it sends trough it’s contact forms.
While plugins like Flamingo save that data, uploaded files are not added to Media Library.
This plugin will save uploaded files to Media Library before email is sent by CF7.
This plugin will raise an event with the the full file path & name.
Subscribe to nmr_create_attachment_file_name filter to get and/or update data before attachment is added to media library.
// The filter callback function.
function example_callback( $file_name ) {
// (maybe) modify $file_name.
return $file_name;
}
add_filter( 'nmr_create_attachment_file_name', 'example_callback', 10, 1 );
Subscribe to nmr_before_insert_attachment filter to be able to change attachment attributes: caption and description are ‘post_ex…
Works as expected out of the box.
Solved my issue without problem, works fine from installation
I am getting error while submitting to CF7.
Note: I am trying to upload MP3 files
<pre>fatal error:
Array
(
[type] => 1
[message] => Uncaught Error: Call to undefined function wp_read_audio_metadata() in /home/theuxm/html/wp-admin/includes/image.php:489
Stack trace:
#0 /home/theuxm/html/wp-content/plugins/store-file-uploads-for-contact-form-7/store-file-uploads-for-contact-form-7.php(39): wp_generate_attachment_metadata()
#1 /home/theuxm/html/wp-content/plugins/store-file-uploads-for-contact-form-7/store-file-uploads-for-contact-form-7.php(55): nmr_create_attachment()
#2 /home/theuxm/html/wp-includes/class-wp-hook.php(305): nmr_on_before_cf7_send_mail()
#3 /home/theuxm/html/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters()
#4 /home/theuxm/html/wp-includes/plugin.php(518): WP_Hook->do_action()
#5 /home/theuxm/html/wp-content/plugins/contact-form-7/includes/submission.php(617): do_action_ref_array()
#6 /home/theuxm/html/wp-content/plugins/contact-form-7/includes/submission.php(86): WPCF7_Submission->before_send_mail()
#7 /home/theuxm/html/wp-content/plugins/contact-form-7/includes/submission.php(27): WPCF7_Submission->proceed()
#8
[file] => /home/theuxm/html/wp-admin/includes/image.php
[line] => 489
)
</pre>
It works and that’s it
Thanks! I spent a day wondering why the temporary file was not longer there then another day finding out that CF7 is moving that file. So this is exactly what I was trying to figure out. It does look like files could be overwritten if they are uploaded with an existing name. You can probably do something like the following to ensure files get unique names and are not overwritten.
// Get the path to the upload directory.
$wp_upload_dir = wp_upload_dir();
$upload_path = $wp_upload_dir['path'];
$unique_filename = wp_unique_filename($upload_path, basename($filename));
$attachFileName = $upload_path . '/' . $unique_filename;
copy($filename, $attachFileName);
// Prepare an array of post data for the attachment.
$attachment = array(
'guid' => $attachFileName,
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', $unique_filename),
'post_content' => '',
'post_status' => 'inherit'
);| WordPress | 4.9+ requiredTested up to 6.5.8 |
| PHP | false+ required |
Add support for skipping saving to Media Library by using nmr_should_skip_save_attachment_to_media_library filter
Plugin data sourced from WordPress.org. Analysis and metrics by PluginSift.