How do I make the old file replaced when the user uploads a new one?
Now the files are named a1.jpg, a2.jpg, a3.jpg. If the user uploads a.jpg, then I want to overwrite the a.jpg that already exists. This shall only apply to this folder / form.
I use ultimate member together with gravity forms and gravity view. Have a form where the owner of the role (company) can upload their own company logo. It gets the renamed to the user role and is placed in a special folder.
So far I've managed to do this:
- Rename the file to the user's role - Done
- Put the file in a dedicated folder - Done
- If the image already exists, overwrite it - Not done
The full code can be found here: https://github.com/gravitywiz/snippet-library/blob/master/gravity-forms/gw-gravity-forms-rename-uploaded-files.php
The configuration in functions
# Configuration
new GW_Rename_Uploaded_Files( array(
'form_id' => 10,
'field_id' => 6,
// most merge tags are supported, original file extension is preserved
'template' => '{Role:7}',
// Ignore extension when renaming files and keep them in sequence (e.g. a.jpg, a1.png, a2.pdf etc.)
'ignore_extension' => false,
) );
To put the files in the correct folder:
add_filter( 'gform_upload_path_10', 'change_upload_path', 10, 2 );
function change_upload_path( $path_info, $form_id ) {
$path_info['path'] = '/var/www/vhosts/example.com/httpdocs/wp-content/uploads/company_logos/';
$path_info['url'] = 'https://example.com/wp-content/uploads/company_logos/';
return $path_info;
}
So far everything is great. The only problem I have is that when the user uploads or changes the image, it should overwrite the old one. Now when the user uploads a new one, they are named company.jpg, company1.jpg, company2.jpg etc.
How do I make the old file replaced?
UPDATE. I found this code for another form. Can I use it in some way for my function?
<?php
add_filter(
'wp_unique_filename',
function( $file_name, $ext, $dir, $cb, $alt, $no ) {
if ( isset( $_POST[ 'action' ] ) && 'forminator_submit_form_custom-forms' === $_POST[ 'action' ] ) {
if ( $no ) {
$find = '-' . $no . $ext;
$original_name = str_replace( $find, $ext, $file_name );
return $original_name;
} else {
return $file_name;
}
}
return $file_name;
},
10,
6
);