Definir nome personalizado para miniaturas geradas

9

Existe algum filtro disponível para definir a convenção de nomenclatura dessas miniaturas geradas automaticamente?

Algo assim:

  • thumbnail_150x150.jpg -> thumbnail-s.jpg
  • thumbnail_300x300.jpg -> thumbnail-m.jpg
  • thumbnail_600x600.jpg -> thumbnail-l.jpg
Sean Lee
fonte

Respostas:

4

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_sizeincluir 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_sizeseguinte maneira:

  • adicionou o $sizeparâmetro à função
  • em vez do nullvalor padrão para $suffix, a switchpara nossos novos sufixos
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 );

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 :))

brasofilo
fonte
11
desculpe, ainda estou viajando. Vou testá-lo em breve e informá-lo. Obrigado.
Sean Lee
Esta resposta ainda é válida? Já faz alguns anos, então ...
Athoxx 21/11
2

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;
} );
Vencedor
fonte
11
regex poderia ser menos específico"/(.*)-\d+x\d+\.(.*)/i"
benoît