TimThumb morreu! Como lidar com imagens no WordPress (guia 2026)
PT-PT

TimThumb morreu! Como lidar com imagens no WordPress (guia 2026)

Última verificação: 1 de maio de 2026
4min de leitura
Guia
Desenvolvedor full-stack

Se é um veterano do WordPress, certamente lembra-se do TimThumb. Era um pequeno script PHP encontrado em quase todos os “temas premium” por volta de 2010. Ele permitia cortar e redimensionar imagens “on the fly” facilmente.

Em 2011, foi descoberta uma vulnerabilidade crítica Zero-Day nele, permitindo que hackers comprometessem milhões de sites. Isso marçou o fim da era dos “scripts simples”.

Hoje, em 2026, o WordPress possui um poderoso motor de gestão de media. Se ainda vê timthumb.php no seu tema – apague-o imediatamente. Neste guia, vou mostrar-lhe como fazer isso profissionalmente.


#Por que o TimThumb era mau?

O TimThumb funcionava “on the fly”: pegava numa imagem de um URL, processava-a e guardava-a numa cache. Problemas:

  1. Segurança: Permitia Execução Remota de Código (RCE) se não fosse perfeitamente configurado.
  2. Performance: Sobrecarregava o servidor PHP a cada novo pedido de imagem.
  3. Sem Integração: Não reconhecia a Biblioteca de Media do WordPress.

#Método 1: Tamanhos nativos (add_image_size)

O WordPress tem a função add_image_size() há anos. Ela permite definir formatos que o sistema gerará automaticamente durante o upload.

#No functions.php:

function wppoland_setup_theme() {
    // Ativar suporte para imagens de destaque (post thumbnails)
    add_theme_support( 'post-thumbnails' );

    // Tamanhos padrão (soft crop - mantém proporção)
    add_image_size( 'blog-list', 800, 400 ); 

    // Hard Crop (corta o excesso)
    // O WordPress cortará exatamente o centro da imagem
    add_image_size( 'team-member', 300, 300, true ); 
    
    // Corte com posicionamento (ex: do topo, da esquerda)
    add_image_size( 'hero-banner', 1920, 600, ['center', 'top'] );
}
add_action( 'after_setup_theme', 'wppoland_setup_theme' );

#No ficheiro de template (ex: Single.php):

if ( has_post_thumbnail() ) {
    the_post_thumbnail( 'hero-banner', ['class' => 'img-fluid'] );
}

Vantagem: As imagens são geradas uma vez (durante o upload). São servidas como ficheiros estáticos prontos. Zero carga de PHP ao exibir.


#Método 2: Geração “on-the-fly”

Tamanhos nativos têm uma desvantagem: se mudar de tema, tem de regenerar as miniaturas (ex: com o plugin Regenerate Thumbnails), o que demora eternidades para uma biblioteca de 100GB.

Em 2026, servidores são rápidos e CDNs são baratos. Muitas vezes usamos uma abordagem híbrida ou serviços externos.

#Solução: Cloudflare / CDN

Em vez de sobrecarregar o seu servidor PHP, use parâmetros de URL.

<img src="https://oseusite.pt/wp-content/uploads/imagem.jpg?width=400&height=300&format=avif">

A maioria dos alojamentos WordPress em 2026 (Kinsta, WP Engine, Cloudways) oferece isto como padrão. Não precisa de um script PHP no seu servidor!


#Método 3: Atributos srcset e sizes

O WordPress gera automaticamente o atributo srcset para as suas imagens, permitindo que o navegador escolha o tamanho apropriado para o dispositivo (telemóvel vs desktop 4K).

<!-- O WordPress gera isto automaticamente: -->
<img src="imagem-800x400.jpg" 
     srcset="imagem-300x150.jpg 300w, 
             imagem-800x400.jpg 800w, 
             imagem-1024x512.jpg 1024w"
     sizes="(max-width: 600px) 100vw, 800px">

O seu trabalho como programador é apenas definir corretamente sizes usando o filtro wp_calculate_image_sizes.


#Otimização: WEBP e AVIF

Em 2026, JPG e PNG são relíquias para fotos. O WordPress suporta nativamente WebP (desde a versão 5.8) e AVIF (desde a versão 6.5).

Não precisa de plugins. Basta fazer upload de um ficheiro AVIF, e o WordPress lida com ele. Ou use um plugin (como Performance Lab) para converter JPGs antigos em AVIF automaticamente durante o upload.


#Limpeza (remover TimThumb)

Se herdou um projeto antigo:

  1. Scan: Pesquise no diretório wp-content por timthumb.php ou thumb.php.
  2. Apagar: Apagué o ficheiro.
  3. Corrigir: Encontre onde era chamado no código:
    // CÓDIGO ANTIGO (MAU)
    <img src="<?php echo get_template_directory_uri(); ?>/timthumb.php?src=..." />
    
    // SUBSTITUIR POR (BOM)
    <?php the_post_thumbnail( 'o-meu-tamanho' ); ?>
  4. Regenerar: Instale WP-CLI e execute wp media regenerate.

#Resumo

A história do TimThumb é uma lição de humildade. Conveniência (escala on-the-fly) não pode estar acima da segurança. temos add_image_size() nativo, srcset responsivo e CDNs a processar imagens na nuvem. Não há razão para voltar a soluções de há 15 anos atrás.

Veja os nossos serviços de otimização de velocidade WordPress.

Próximo passo

Transforme o artigo numa implementação real

Este bloco reforça a ligação interna e conduz o leitor para o passo seguinte mais útil dentro da arquitetura do site.

FAQ do artigo

Perguntas Frequentes

Respostas práticas para aplicar o tema na execução real.

SEO-ready GEO-ready AEO-ready 3 Q&A
Porque deixou o TimThumb de ser recomendado? #
Porque introduziu riscos de segurança sérios é uma arquitetura frágil para redimensionamento de imagens em produção."
Qual é a alternativa nativa no WordPress? #
O uso de add_image_size, thumbnails nativos e funções da biblioteca de media do próprio WordPress."
Vale a pena continuar a gerar imagens on the fly? #
Só em casos muito específicos. Na maioria dos projetos é melhor gerar tamanhos no upload e servir ficheiros estáticos."

Precisa de FAQ adaptado ao setor e mercado? Criamos uma versão alinhada com os seus objetivos de negócio.

Fale connosco

Artigos Relacionados

WordPress 7.0 com AI Client vs Astro 6 após aquisição pela Cloudflare. Comparação de velocidade, custos, SEO e segurança. A minha perspetivá após 20 anos como programador WP - quando migrar e quando ficar.
wordpress

WordPress 7.0 vs Astro 6 após aquisição pela Cloudflare - quem vence em 2026?

WordPress 7.0 com AI Client vs Astro 6 após aquisição pela Cloudflare. Comparação de velocidade, custos, SEO e segurança. A minha perspetivá após 20 anos como programador WP - quando migrar e quando ficar.

Pare de escrever instruções if desarrumadas. Aprenda a diferença entre in_category e has_term, como lidar com categorias filhas recursivas e otimizar tags condicionais.
development

Lógica condicional WordPress para categorias e taxonomias

Pare de escrever instruções if desarrumadas. Aprenda a diferença entre in_category e has_term, como lidar com categorias filhas recursivas e otimizar tags condicionais.

Domine o Loop do WordPress. Aprenda a escrever argumentos WP_Query de alta performance, evité armadilhas SQL e pagine loops personalizados corretamente.
development

WP_Query e The Loop: performance, taxonomias e templates

Domine o Loop do WordPress. Aprenda a escrever argumentos WP_Query de alta performance, evité armadilhas SQL e pagine loops personalizados corretamente.