A manipulação de imagens é sem dúvida um dos grandes desafios no desenvolvimento de um site. Isso ocorre pois nem sempre os tamanhos enviados pelos autores do site ou gerenciadores de conteúdo possuem as medidas ou proporções corretas de serem aplicados ao template do projeto em questão. Trabalhando com o WordPress para gerenciamento do conteúdo é possível gerar tamanhos específicos das imagens enviadas, e também filtrar esse trabalho de redimensionamento de modo otimizado; determinando quando ele deve ocorrer ou não.
TAMANHO DE IMAGENS
O WordPress trabalha com os seguintes tamanhos para o emprego de imagens por padrão: Miniatura, Médio, Grande e o próprio tamanho original da imagem. As dimensões para cada um desses formatos é passível de edição dentro das Configurações de mídia no painel de controle.
Como esses formatos podem ser facilmente alterados pelo usuário, um método para iniciar o trabalho com tamanhos específicos de imagens dentro do WordPress é adicionar novos formatos a ele usando a função add_image_size:
add_image_size( $name, $width, $height, $crop );
Pela ordem dos parâmetros, estipula-se um identificador do tipo slug para o formato, largura, altura e se a imagem deve ser recortada ao não. Dessa maneira quando for preciso recuperar uma imagem em um tamanho específico basta informar ao WordPress o nome do formato criado. Exemplificando, teremos no functions.php as instruções:
<?php add_action( 'after_setup_theme', 'meu_tema_configuracoes' ); function meu_tema_configuracoes() { add_image_size( 'miniatura', 300, 250, true ); } ?>
E dentro dos arquivos do tema, na recuperação das imagens, algo como:
<?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'miniatura' ); } ?>
REDIMENSIONAR IMAGENS DE ACORDO COM O CONTEÚDO
Essa solução é muito boa, pois temos os nossos tamanhos nas medidas e do modo exato como queremos; porém existe um pequeno problema em termos de otimização a ser reparado. Usando essa técnica podemos adicionar quantos formatos forem necessários a um mesmo projeto; porém nem sempre os formatos são aproveitados. Ou seja, é possível que seja criado um formato que apenas será exibido para posts e não para as páginas; ou então um outro que seja específico de um Custom Post Type.
Ao estudar a API de Plugins pude verificar que para esses casos o WordPress disponibiliza o filtro intermediate_image_sizes. O filtro permite controlar os formatos de thumbnails gerados no envio e exclusão das imagens, devendo ter como retorno um array com os identificadores dos formatos pretendidos:
<php add_filter( 'intermediate_image_sizes', 'filtro_tamanhos_imagens' ); function filtro_tamanhos_imagens( $sizes ) { global $post; /** * * Se a imagem estiver sendo inserida seu identificador é enviado via $_POST * Caso esteja sendo excluída, o id é recuperado pela variável global $post * */ $post_type = ''; if ( isset( $_POST[ 'post_id' ] ) ) { $post_type = get_post_type( $_POST[ 'post_id' ] ); } else if ( isset( $post ) && isset( $post->post_parent ) && ( $post->post_parent > 0 ) ) { // Notem que a variável global $post é o objeto do anexo e não do post a qual ele pertence $post_type = get_post_type( $post->post_parent ); } // Aqui temos um array com os formatos padrões $sizes = array( 'thumbnail', 'medium', 'large' ); switch( $post_type ): case 'meu_custom_post_type': // É incorporado aos formatos padrões um tamanho previamente criado apenas para o tipo de post personalizado array_push( $sizes, 'miniatura_cpt' ); break; case 'page': // Nenhum redimensionamento é feito para as páginas $sizes = array(); break; default: // por padrão é gerado os formatos padrões e o formato adicional 'miniatura' array_push( $sizes, 'miniatura' ); break; endswitch; return $sizes; } ?>
ATENÇÃO AOS DETALHES
Perceba que a grande sacada está no uso do filtro tanto para adição da imagem, quanto para sua exclusão. Caso não seja recuperado o post no ato da exclusão para o filtro também ser aplicado corretamente, as imagens geradas de modo personalizado permanecerão na pasta de uploads; o que não é nada interessante.
Atenha-se ao código que captura o ID do post ao qual a imagem é anexa; isso é essencial para a correta aplicação dessa técnica, o restante do código são apenas adaptações que você irá fazer para determinar onde as imagens devem ou não ser redimensionadas. No caso acima o filtro foi aplicado de acordo com o Custom Post Type. Porém após recuperar o ID do post é possível aplicar o filtro por categorias, tags e o que mais for necessário.
Feito esse tratamento teremos as imagens de acordo com a necessidade do projeto sem uso desnecessário de servidor para armazenamento de arquivos; pois não há necessidade de se gerar um formato que não seja utilizado em local nenhum. Essa aplicação traz grandes economias principalmente em projetos de grande porte onde existem vários tamanhos de imagens e seu uso é limitado para seções específicas.
Abraços!