pular para o conteúdo

Tema filho no WordPress: por que o index.php pode deixar sua página em branco

Capa: Tema filho, a armadilha do index.php

Transformei o tema deste site num tema filho do Hello Elementor e, do nada, os posts do blog pararam de aparecer. Não veio erro, não veio aviso: a página respondia 200 OK e o corpo chegava completamente vazio. Depois de descartar cache, plugin e permissão de arquivo, a causa era um index.php que eu tinha criado só pra "preencher" o tema filho — prática comum, copiada de outro projeto.

O sintoma

É o tipo de bug chato: nenhuma mensagem de erro pra procurar no Google, porque tecnicamente nada deu errado. Nas ferramentas de rede do navegador, o status vinha 200 — pro servidor, a requisição tinha dado certo. O log de erro do PHP estava limpo, sem nada pra investigar ali. O jeito mais rápido de confirmar que o problema é esse mesmo — e não CSS quebrado, JS travando ou algo visual — é medir quantos bytes a página realmente devolve:

				
					curl -s https://example.com/blog/post-exemplo/ | wc -c
# saída: 0
				
			

Numa página normal do blog, esse número passa de 30 mil bytes. Voltar zero (ou perto disso) é sinal de que o WordPress processou a requisição, mas não montou conteúdo nenhum pra devolver.

200 OK não é garantia de página certa. Sempre meça o tamanho do corpo antes de sair procurando bug em outro lugar — plugin, cache, CSS. Economiza hora de investigação errada.

Por que aconteceu

O WordPress decide qual arquivo vai renderizar a página seguindo a hierarquia de templates — e quando o site é um tema filho, ele procura primeiro dentro do tema filho. Se o filho tem um index.php, é esse arquivo que roda. Não importa o que exista no index.php do tema pai: ele nunca é chamado.

Se você nunca mexeu com tema filho: ele existe pra você customizar um tema sem perder atualização — herda tudo do pai e só sobrescreve o que precisa. O problema aparece quando você sobrescreve por hábito, sem precisar.

No caso do Hello Elementor (o tema pai), é o index.php dele quem chama elementor_theme_do_location('single') — a função que entrega o conteúdo renderizado pelo Theme Builder do Elementor. O meu index.php do tema filho era um arquivo genérico, copiado de outro projeto só pra o tema não ficar sem template nenhum. Ele nunca chamava essa função. Resultado: o WordPress carregava a página inteira e processava tudo certinho — por isso o 200 — mas o HTML final saía sem conteúdo, porque o arquivo que estava rodando de fato não sabia pedir esse conteúdo.

Como diagnosticar

Com o sintoma confirmado, o resto é achar qual arquivo está sendo carregado de verdade:

  1. Confirme o tamanho da resposta: curl -s URL | wc -c. Bem menor que o normal = suspeita confirmada.
  2. Descubra o template que o WordPress está usando de fato para aquela página (comando logo abaixo).
  3. Compare o caminho: ele aponta pro tema filho ou pro tema pai? Se apontar pro filho e o comportamento esperado estiver no pai, achou o problema.
  4. Corrija apagando o arquivo do filho e rode o curl de novo pra confirmar.
				
					wp eval 'global $template; echo $template;'
# saída: /caminho/do/site/wp-content/themes/meu-tema-filho/index.php

# ou, durante o próprio render:
# var_dump( get_query_template( 'index' ) );
				
			

A correção

A correção, nesse caso, é apagar o arquivo — não editar. Sem index.php no tema filho, o WordPress cai automaticamente pro index.php do tema pai. É assim que herança de tema funciona: arquivo ausente no filho = usa o do pai, silenciosamente, sem precisar configurar nada.

				
					rm wp-content/themes/meu-tema-filho/index.php
				
			

Depois de apagar, rodei o mesmo curl -s URL | wc -c de novo. O tamanho voltou ao normal e a página do blog apareceu inteira.

A regra para não cair de novo

A regra que eu devia ter seguido desde o começo: tema filho só ganha um arquivo de template quando tem algo diferente pra fazer ali. Se o index.php do filho não muda nada em relação ao do pai, o arquivo não deveria existir.

  • Quando o conteúdo dali é realmente diferente do pai — uma página especial, por exemplo.
  • front-page.php customizado.
  • functions.php com hooks próprios: esse sempre vale a pena ter.
  • style.css do filho sempre existe (é ele que declara o Template: do pai) — isso não é o mesmo problema, é obrigatório.

A regra vale pra qualquer template de renderização — index.php, page.php, single.php, archive.php e por aí vai. Só crie o arquivo se for mudar algo de verdade; caso contrário, deixe o WordPress usar o do pai.

Do mesmo assunto

Tutoriais, WordPress

25 ago 2026

Webhook de pedido no WordPress: não perder e não duplicar

Webhook de loja chega duas vezes, chega fora de ordem
Capa: Criando seu próprio endpoint REST no WordPress

Desenvolvimento WordPress

28 jun 2026

Como criar um endpoint REST customizado no WordPress (passo a passo)

Mais cedo ou mais tarde, todo dev WordPress precisa expor

Como sanitizar corretamente HTML vindo do ACF no WordPress

Desenvolvimento WordPress

22 abr 2025

Sanitização no WordPress: Protegendo HTML do ACF ewp_kses

A sanitização no WordPress: protegendo HTML do ACF com wp_kses

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *