Respostas:
Parece que a resposta é não ...
Eu segui as principais funções e encontrei um beco sem saída. E encontrei este post ( como posso fazer o add_image_size () cortar a partir do topo? ), Onde Rarst diz:
A geração intermediária de imagens é extremamente rígida. Image_resize () mantém o código próximo e não possui ganchos.
Mas , seguindo o exemplo da outra resposta (de bradt ) e o código que ele publicou ( Image Crop Position no WordPress ), acho que entendi :)
Na função bt_generate_attachment_metadata
, eu apenas modifiquei a chamada para bt_image_make_intermediate_size
incluir o último parâmetro$size
$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );
E modificou o início da função da bt_image_make_intermediate_size
seguinte maneira:
$size
parâmetro à funçãonull
valor padrão para $suffix
, a switch
para nossos novos sufixosfunction 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 );
Aqui , uma cópia do código completo com meus mods, apenas para referência.
E o diff do original .
Muito provavelmente, todo o código pode ser reduzido a zero, mas dessa maneira obtemos o benefício de imagens cortadas personalizadas :))
Você poderia usar o filtro image_make_intermediate_size , mas teria que descobrir para qual nome deseja alterar o arquivo intermediário, de acordo com o $ filename que você obtém (e depois renomear o arquivo, porque neste momento ele já foi gerado).
Eu apenas gero uma imagem de tamanho intermediário para a "miniatura", por isso é tão simples quanto isto:
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"