Odpowiedzi:
Wydaje się, że odpowiedź brzmi nie ...
Śledziłem podstawowe funkcje i znalazłem ślepy zaułek. I znalazłem ten post ( Jak mogę zrobić uprawę add_image_size () od góry? ), W której Rarst mówi:
Pośrednie generowanie obrazu jest wyjątkowo sztywne. Image_resize () utrzymuje go blisko kodu i całkowicie brakuje haków.
Ale idąc tropem drugiej odpowiedzi (od bradta ) i kodu, który opublikował ( Image Crop Position w WordPress ), myślę, że ją mam :)
W funkcji bt_generate_attachment_metadata
właśnie zmodyfikowałem wywołanie tak, aby bt_image_make_intermediate_size
zawierało ostatni parametr$size
$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );
I zmodyfikowałem początek funkcji bt_image_make_intermediate_size
w następujący sposób:
$size
parametr do funkcjinull
wartości domyślnej $suffix
, a switch
do naszych nowych sufiksówfunction 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 );
Tutaj kopia pełnego kodu z moimi modami, tylko w celach informacyjnych.
I różni się od oryginału .
Prawdopodobnie cały kod można skrócić do gołej kości, ale w ten sposób uzyskujemy korzyść z niestandardowych przyciętych obrazów :))
Możesz użyć filtru image_make_intermediate_size , ale musiałbyś dowiedzieć się, na jaką nazwę chcesz zmienić plik pośredni, zgodnie z otrzymaną $ nazwą pliku (a następnie zmień nazwę pliku, ponieważ w tym momencie został już wygenerowany).
Generuję tylko obraz o pośredniej wielkości dla „miniatury”, więc jest to tak proste:
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"