2

Good morning,

I am trying to change name format that Wordpress uses to rename uploaded files. As I upload an image whose filename is "desert-landscape.jpg", Wordpress will set up scaled versions and rename filenames to different combinations of "desert-landscape-{WIDTHxHEIGHT}.jpg" (dipending on thumbnail sizes).

Is there a way to remove width & height attribute from filename and replace them by "{medium}-desert-landscape.jpg", "{large}-desert-landscape.jpg" and "{small}-desert-landscape.jpg"?

Have been looking at this post Rename image uploads with width in filename me not able to fix it right way.

Thank you

// 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;
}
  • looks like that script is not working anymore in wp 4.9 - any idea how to fix it? was extremely useful. if you set up the script in your funtions.php, after the upload the thumbnail in media library is broken, no file is being saved in uploads...not even the old ones ZZZxYYYpx.jpg – ff-webdesigner Feb 15 '18 at 14:47
3

To be honest I'm a bit puzzled that all what you have tried so far is copying & pasting an answer that doesn't solve your problem. On the other hand, you described your problem clearly. Below I outline a solution for you, take a look at the additional comments and information sources, if you really want to understand what's happening.

Code:

// The filter runs when resizing an image to make a thumbnail or intermediate size.
add_filter( 'image_make_intermediate_size', 'wpse_123240_rename_intermediates' );
function wpse_123240_rename_intermediates( $image ) {
    // Split the $image path into directory/extension/name
    $info = pathinfo($image);
    $dir = $info['dirname'] . '/';
    $ext = '.' . $info['extension'];
    $name = wp_basename( $image, "$ext" );

    // Get image information 
    // Image edtor is used for this
    $img = wp_get_image_editor( $image );
    // Get image size, width and height
    $img_size = $img->get_size();

    // Image prefix for builtin sizes
    // Note: beware possible conflict with custom images sizes with the same width
    $widths = [];
    $size_based_img_name_prefix = '';
    foreach ( get_intermediate_image_sizes() as $_size ) {
        if ( in_array( $_size, [ 'thumbnail', 'medium', 'medium_large', 'large' ] ) ) {
            $width = get_option( "{$_size}_size_w" );
            if ( ! isset( $widths[ $width ] ) ) {
                $widths[ $width ]  = $_size;
            }
        }
    }
    if ( array_key_exists( $img_size[ 'width' ], $widths ) ) {
        $size_based_img_name_prefix = $widths[ $img_size['width'] ] . '-';
        $name_prefix = substr( $name, 0, strrpos( $name, '-' ) );
    } else {
        $name_prefix = $name;
    }

    // Build our new image name
    $new_name = $dir . $size_based_img_name_prefix . $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;
}

Information Sources:

Notes: untested

  • >>To be honest I'm a bit puzzled that all what you have tried so far is copying & pasting an answer that doesn't solve your problem. You are right, SORRY ! – morelo Nov 16 '13 at 13:58
  • Many thanks for answering, ialocin, it works ! Much appreciated. – morelo Nov 16 '13 at 13:59
  • My pleasure. Not a problem, otherwise I wouldn't have answered, but I had to mention it for educational measures. Can you please check mark the answer to end the process? And, if you think it deserves it feel free to upvote. @morelo – Nicolai Nov 16 '13 at 15:30
  • Thank you again, ialocin. Cannot upvote because of my poor reputation, will do it as soon as I get 15. Will do it. – morelo Nov 16 '13 at 15:53
  • No sweat, it was more a general thought anyways. I always forget about those reputation restrictions though. @morelo – Nicolai Nov 16 '13 at 16:10

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.