답변:
대답이 아니오 인 것 같습니다 ...
핵심 기능을 따라 막 다른 골목을 찾았습니다. 그리고 Rarst가 말하는 이 게시물 ( top에서 add_image_size ()을 어떻게 만들 수 있습니까? )을 찾았습니다 .
중간 이미지 생성은 매우 견고합니다. Image_resize ()는 코드에 가깝게 유지하고 후크가 완전히 없습니다.
그러나 , 다른 대답 ( bradt )과 그가 출판 한 코드 ( WordPress의 Image Crop Position ) 의 선두에 따라 , 나는 그것을 얻었다 고 생각합니다 :)
함수 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 );
여기 , 참조 용으로 개조 한 전체 코드의 사본.
그리고 원본 에서 diff .
아마도 모든 코드가 베어 본으로 축소 될 수 있지만이 방법으로 사용자 정의 자른 이미지의 이점을 얻을 수 있습니다 :))
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"