3

I am attempting to change the name format that WordPress uses to rename uploaded files. For example, when I upload an image with filename cat-picture.jpg WordPress will create scaled versions and rename the filename to variations of cat-picture-{WIDTHxHEIGHT}.jpg. Is there a way I am able to move this width & height attribute to the beginning of the filename so instead I get variations of {WIDTHxHEIGHT}-cat-picture.jpg? So, in the context of this example, I'd like the filename to be renamed to 600x400-cat-picture.jpg. Thoughts?

I've looked at this post and this post, but I am unable to come up with a working solution. Here's my code:

add_filter( 'wp_handle_upload_prefilter', 'modify_uploaded_file_names', 20);
function modify_uploaded_file_names( $image ) {
    // Get default name of uploaded file and set to variable
    $imagename = $image['name'];
    // Case switch for multiple file extensions
    switch ( $image['type'] ) {
        case 'image/jpeg' :
            $suffix = 'jpg';
            break;
        case 'image/png' :
            $suffix = 'png';
            break;
        case 'image/gif' :
            $suffix = 'gif';
            break;
    }
    // Get size of uploaded image and assign to variable
    $imagesize = getimagesize($image);
    // Re-structure uploaded image name
    $image['name'] = "{$imagesize[0]}x{$imagesize[1]}-{$imagename}.{$suffix}";

    return $image;
}
  • 2
    I'm not quite sure I can answer your question, but please make sure that you include what you're actually trying to do. it's possible that people can suggest a different solution to the initial problem you're trying to solve. (This is sometimes called the XY problem) – mrwweb Jan 18 '13 at 18:57
3

I've managed to do it with the filter image_make_intermediate_size.

Probably all the path/filename.extension dismembering and remaking could be optimized or made in a single stroke fashion, but alas, I'll let that to the reader:

// The filter runs when resizing an image to make a thumbnail or intermediate size.
add_filter( 'image_make_intermediate_size', 'rename_intermediates_wpse_82193' );

function rename_intermediates_wpse_82193( $image ) 
{
    // Split the $image path into directory/extension/name
    $info = pathinfo($image);
    $dir = $info['dirname'] . '/';
    $ext = '.' . $info['extension'];
    $name = wp_basename( $image, "$ext" );

    // Build our new image name
    $name_prefix = substr( $name, 0, strrpos( $name, '-' ) );
    $size_extension = substr( $name, strrpos( $name, '-' ) + 1 );
    $new_name = $dir . $size_extension . '-' . $name_prefix . $ext;

    // Rename the intermediate size
    $did_it = rename( $image, $new_name );

    // Renaming successful, return new name
    if( $did_it )
        return $new_name;

    return $image;
}
  • PS: I did only basic tests of uploading in a post and inserting intermediates in content, so far so good... – brasofilo Jan 18 '13 at 21:23
  • Thank you so much for your response!! So just to clarify, this function will run every time a file is uploaded, correct? Trying to fully understand, but this function will rename every intermediate file created on upload? Also, I'm curious if there would be a way to instead format the renamed file so that instead, only the width would be in the filename. ie like: "600-cat-picture.jpg" instead of "600x400-cat-picture.jpg". This format would work better with my responsive image script. Any thoughts/help you could share? Thank you. – kaffolder Jan 23 '13 at 7:20
  • 1
    @kaffolder, I've added comments to the code, so it's clear what each part is doing. Yes, it's possible to use only the width, you need to do this to the $size_extension string ;) – brasofilo Jan 23 '13 at 13:20
  • Thanks so much @brasofilo! Spot on!! This will help immensely with the responsive foresight.js image plugin I'm working on. Cheers! – kaffolder Jan 23 '13 at 16:21
  • Glad to know, @kaffolder! Ping us the link to the plugin here when it's finished ;) – brasofilo Jan 23 '13 at 16:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.