Is there any filter available to set the naming convention of those auto generated thumbnails?
Something like this:
- thumbnail_150x150.jpg -> thumbnail-s.jpg
- thumbnail_300x300.jpg -> thumbnail-m.jpg
- thumbnail_600x600.jpg -> thumbnail-l.jpg
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Seems that the answer is no…
I’ve followed the core functions and found a dead-end. And found this post ( How can I make add_image_size() crop from the top? ) where Rarst says:
Intermediate image generation is extremely rigid. Image_resize() keeps it close to code and completely lacks hooks.
But, following the lead of the other answer (from bradt) and the code he published ( Image Crop Position in WordPress ), I think I got it 🙂
In the function bt_generate_attachment_metadata, I’ve just modified the call to bt_image_make_intermediate_size including the last parameter $size
$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );
And modified the beggining of the function bt_image_make_intermediate_size as follows:
- added the
$sizeparameter to the function - instead of the default
nullvalue to$suffix, aswitchto our new suffixes
function bt_image_make_intermediate_size( $file, $width, $height, $crop = false, $size ) {
if ( $width || $height ) {
switch($size) {
case 'thumbnail':
$suffix = 't';
break;
case 'medium':
$suffix = 'm';
break;
case 'large':
$suffix = 'l';
break;
default:
$suffix = null;
break;
}
$resized_file = bt_image_resize( $file, $width, $height, $crop, $suffix, null, 90 );
Here , a copy of the full code with my mods, just for reference.
And the diff from the original.
[2021]
I reviewed the code to fix the following warnings, (h/t @meek2100): two WP functions were deprecated and there’s a PHP 8 notice about named parameters.
Gist with the changes annotated on code.
Method 2
You could use the filter image_make_intermediate_size, but you would have to figure out what name you want to change the intermediate file to, according to the $filename you get (and then rename the file, because at this point it already has been generated).
I only generate an intermediate size image for the “thumbnail”, so it is as simple as this:
add_filter( 'image_make_intermediate_size', function( $filename ) {
// old 2017_234783843-100x100.jpg
$old = $filename;
// new 2017_234783843-thumbnail.jpg
$new = preg_replace("/(d+_d+)-d+xd+.(.*)/i", "$1-thumbnail.$2", $old );
rename($old, $new);
return $new;
} );
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0