Ответы:
Кажется, что ответ нет ...
Я следил за основными функциями и нашел тупик. И нашел этот пост ( Как я могу сделать обрезку add_image_size () сверху? ), Где Rarst говорит:
Промежуточная генерация изображения очень жесткая. Image_resize () держит его близко к коду и полностью лишен хуков.
Но , следуя указаниям другого ответа (от Брэдта ) и опубликованному им коду ( Image Crop Position in WordPress ), я думаю, что получил его :)
В функции bt_generate_attachment_metadata
я только что изменил вызов, bt_image_make_intermediate_size
включив последний параметр$size
$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );
И изменил начало функции bt_image_make_intermediate_size
следующим образом:
$size
параметр в функциюnull
для $suffix
а switch
наших новых суффиксов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 );
Здесь копия полного кода с моими модами, просто для справки.
И разница с оригиналом .
Скорее всего, весь код можно сжать до гола, но таким образом мы получаем выгоду от пользовательских обрезанных изображений :))
Вы можете использовать фильтр image_make_intermediate_size , но вам придется выяснить, на какое имя вы хотите изменить промежуточный файл, в соответствии с $ filename, который вы получите (а затем переименовать файл, потому что на данный момент он уже создан).
Я создаю только промежуточный размер изображения для «миниатюры», так что это так просто:
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+x\d+\.(.*)/i", "$1-thumbnail.$2", $old );
rename($old, $new);
return $new;
} );
"/(.*)-\d+x\d+\.(.*)/i"