Câu trả lời:
Có vẻ như câu trả lời là không ...
Tôi đã theo các chức năng cốt lõi và tìm thấy một ngõ cụt. Và tìm thấy bài đăng này ( Làm cách nào tôi có thể tạo add_image_size () crop từ đầu? ) Trong đó Rarst nói:
Tạo hình ảnh trung gian là vô cùng cứng nhắc. Image_resize () giữ cho nó gần với mã và hoàn toàn thiếu các hook.
Nhưng , theo sự dẫn dắt của câu trả lời khác (từ bradt ) và mã anh ấy đã xuất bản ( Image Crop Position trong WordPress ), tôi nghĩ rằng tôi đã nhận được nó :)
Trong hàm bt_generate_attachment_metadata
, tôi vừa sửa đổi cuộc gọi để bt_image_make_intermediate_size
bao gồm tham số cuối cùng$size
$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );
Và sửa đổi chức năng xin lỗi bt_image_make_intermediate_size
như sau:
$size
tham số cho hàmnull
giá trị mặc định $suffix
, a switch
đến hậu tố mới của chúng tôifunction 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 );
Ở đây , một bản sao của mã đầy đủ với các mod của tôi, chỉ để tham khảo.
Và khác với bản gốc .
Rất có thể, tất cả các mã có thể được thu nhỏ lại chỉ còn một mảnh xương, nhưng bằng cách này chúng ta có được lợi ích của hình ảnh được cắt tùy chỉnh :))
Bạn có thể sử dụng bộ lọc image_make_inter liền_size , nhưng bạn sẽ phải tìm ra tên mà bạn muốn thay đổi tệp trung gian thành, theo tên tệp $ bạn nhận được (và sau đó đổi tên tệp, vì tại thời điểm này, nó đã được tạo).
Tôi chỉ tạo một hình ảnh kích thước trung gian cho "hình thu nhỏ", vì vậy nó đơn giản như sau:
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"