Відповіді:
Здається, що відповідь - ні ...
Я дотримувався основних функцій і виявив тупик. І знайшов цю публікацію ( як я можу зробити обріз add_image_size () зверху? ), Де говорить Рарст :
Проміжне генерування зображення надзвичайно жорстке. Image_resize () тримає його близько до коду та повністю не має гачків.
Але , слідкуючи за іншою відповіддю (від bradt ) та кодом, який він опублікував ( Image Crop Position в 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
, a 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 , але вам доведеться розібратися, на яке ім'я ви хочете змінити проміжний файл, відповідно до отриманого вами імені $ (а потім перейменувати файл, тому що в цей момент він вже створений).
Я генерую лише зображення проміжного розміру для "мініатюри", тому це так просто, як це:
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"