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 marcou 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:
- Segurança: Permitia Execução Remota de Código (RCE) se não fosse perfeitamente configurado.
- Performance: Sobrecarregava o servidor PHP a cada novo pedido de imagem.
- 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:
- Scan: Pesquise no diretório
wp-contentportimthumb.phpouthumb.php. - Apagar: Apague o ficheiro.
- 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' ); ?> - Regenerar: Instale
WP-CLIe executewp 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.

