Definir nome personalizado para miniaturas geradas

9

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

Algo parecido com isto:

  • thumbnail_150x150.jpg - > thumbnail-s.jpg
  • thumbnail_300x300.jpg - > thumbnail-m.jpg
  • thumbnail_600x600.jpg - > thumbnail-l.jpg
por Sean Lee 11.05.2012 / 23:05

2 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 crop add_image_size () de cima? ) onde Rarst diz:

  

A geração de imagens intermediárias é extremamente rígida. Image_resize () mantém perto do código e completamente sem 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 , acabei de modificar a chamada para bt_image_make_intermediate_size incluindo 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 bt_image_make_intermediate_size da seguinte forma:

  • adicionou o parâmetro $size à função
  • em vez do valor padrão null para $suffix , um switch para 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 dif do original .

Muito provavelmente, todo o código pode ser reduzido a um osso nu, mas desta forma obtemos o benefício de imagens cortadas personalizadas:))

    
por brasofilo 13.05.2012 / 00:28
1

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 nome do arquivo $ obtido (e renomeie o arquivo, porque neste momento já foi gerado).

Gerei apenas uma imagem de tamanho intermediário para a "miniatura", por isso é tão simples assim:

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;
} );
    
por Víctor 19.08.2017 / 14:17