Jawaban:
Tampaknya jawabannya adalah tidak ...
Saya telah mengikuti fungsi inti dan menemukan jalan buntu. Dan menemukan posting ini ( Bagaimana saya bisa membuat add_image_size () memotong dari atas? ) Di mana Rarst mengatakan:
Generasi gambar menengah sangat kaku. Image_resize () menyimpannya dekat dengan kode dan benar-benar tidak memiliki kait.
Tapi , mengikuti petunjuk dari jawaban lain (dari bradt ) dan kode yang dia terbitkan ( Posisi Pemotongan Gambar di WordPress ), saya rasa saya mengerti :)
Dalam fungsinya bt_generate_attachment_metadata
, saya baru saja memodifikasi panggilan untuk bt_image_make_intermediate_size
memasukkan parameter terakhir$size
$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );
Dan memodifikasi awal fungsi bt_image_make_intermediate_size
sebagai berikut:
$size
parameter ke fungsinull
ke $suffix
, a switch
ke sufiks baru kamifunction 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 );
Di sini , salinan kode lengkap dengan mod saya, hanya untuk referensi.
Dan beda dari aslinya .
Sangat mungkin, semua kode dapat menyusut sampai tulang kosong, tetapi dengan cara ini kita mendapatkan manfaat dari gambar yang dipangkas khusus :))
Anda dapat menggunakan filter image_make_intermediate_size , tetapi Anda harus mencari tahu nama yang ingin Anda ubah file perantara, sesuai dengan $ filename yang Anda dapatkan (dan kemudian ganti nama file tersebut, karena pada titik ini sudah dibuat).
Saya hanya menghasilkan gambar ukuran sedang untuk "thumbnail", jadi sesederhana ini:
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"