# Theme.json: Customize o tema WordPress em 5 passos

Configurar cores e tipografia pelo <strong>theme.json</strong> centraliza o estilo do tema num arquivo só. Segundo a <a href="https://developer.wordpress.org/themes/global-settings-and-styles/" rel="noopener" target="_blank">documentação oficial do WordPress (2024)</a>, ele define presets globais que o editor lê direto. Reduz o CSS solto e deixa o cache de estilo previsível. Comece pela paleta antes da tipografia.

No WordPress moderno, o arquivo theme.json controla a aparência do tema por configuração, não por CSS espalhado. Ele fica na raiz do tema e descreve cores, fontes, espaçamentos e layout que o Site Editor e o editor de blocos leem na hora de renderizar. Em vez de editar o `style.css` ou empilhar regras no Customizer, você declara presets num formato estruturado e o WordPress gera o CSS final. Este guia mostra como customizar o tema com theme.json em cinco passos, da paleta de cores até a hierarquia entre tema-pai e child theme. Para o panorama completo do cluster, veja os <a href="https://full.services/temas-wordpress/">conteúdos de temas WordPress da FULL</a>.

---

## Primeiros passos: O que o theme.json controla

O theme.json controla quatro camadas de estilo do tema: settings (presets disponíveis), styles (valores aplicados), customTemplates e templateParts. Na prática, é onde você define a paleta de cores, a escala tipográfica, os tamanhos de espaçamento e o layout de largura. A tabela abaixo resume cada chave principal e o efeito direto na interface, com base no comportamento padrão do <a href="https://developer.wordpress.org/themes/global-settings-and-styles/" rel="noopener" target="_blank">Theme Handbook oficial</a>.

<table id="chaves-theme-json">
  <caption>theme.json: chaves principais e efeito na interface do editor</caption>
  <thead>
    <tr>
      <th scope="col">Chave</th>
      <th scope="col">Função</th>
      <th scope="col">Efeito na interface</th>
    </tr>
  </thead>
  <tbody>
    <tr><th scope="row">settings.color.palette</th><td>Define cores nomeadas</td><td>Limita o seletor de cor aos valores do tema</td></tr>
    <tr><th scope="row">settings.typography</th><td>Fontes e tamanhos</td><td>Popula o menu de tipografia do bloco</td></tr>
    <tr><th scope="row">settings.spacing</th><td>Escala de espaçamento</td><td>Cria os presets de padding e margin</td></tr>
    <tr><th scope="row">styles</th><td>Aplica os valores</td><td>Gera o CSS global inline do site</td></tr>
  </tbody>
</table>

Um theme.json bem montado transforma decisões de design em contrato técnico: o editor só oferece o que o tema autoriza, o que reduz erro de cliente.

## Por que o theme.json substitui o CSS do customizer

O theme.json tem precedência sobre o CSS adicional do Customizer em 2 frentes: o WordPress gera os estilos globais inline com peso de especificidade próprio e os serve no `<head>` antes do Customizer. Quando você declara `styles.color.background`, essa regra costuma vencer o CSS solto na maioria dos cenários.

O problema clássico aparece quando há os dois ao mesmo tempo: o CSS do Customizer concorrendo com o theme.json gera especificidade imprevisível e invalida o cache de estilo a cada deploy. No suporte da FULL, boa parte dos tickets de "minha cor não muda" vem exatamente daí, um tema com theme.json novo e um Customizer cheio de regras antigas brigando. A regra prática é migrar o CSS do Customizer para o theme.json e manter o `style.css` só para ajustes que o arquivo não cobre. Se o seu fluxo ainda depende de página com builder, vale comparar os <a href="https://full.services/glossario/json-wordpress/">arquivos JSON do WordPress</a> com os métodos de <a href="https://full.services/como-adicionar-css-personalizado-no-elementor-5-metodos-infaliveis/">CSS personalizado no Elementor</a>.

## Passo a passo: Customizar o tema com theme.json

Customizar o tema com theme.json segue uma ordem estável de 5 passos, do arquivo base até a publicação no Site Editor, e leva poucos minutos por ajuste depois que a estrutura existe. Os passos abaixo assumem um tema de blocos como o Twenty Twenty-Four ou um child theme do Astra, e cada etapa é independente.

### Passo 1: Crie o arquivo theme.json na raiz do tema

Crie um arquivo chamado `theme.json` na pasta raiz do tema, no mesmo nível do `style.css`. A primeira linha obrigatória é `"version": 2`, o schema atual desde o WordPress 5.9. Sem essa chave, o WordPress ignora o resto do arquivo. Use um editor com validação JSON para evitar vírgula sobrando, o erro de sintaxe número um nos tickets que a gente vê no suporte. Salve o arquivo vazio com apenas a versão e recarregue o editor para confirmar que o tema não quebrou.

### Passo 2: Defina a paleta de cores em settings.color.palette

Declare as cores dentro de `settings.color.palette`, cada uma com slug, color e name. O slug vira a classe CSS (`has-primary-color`) e o name aparece no seletor do editor. Defina de 4 a 8 cores nomeadas: limitar a paleta força consistência visual e remove o seletor de hex livre da interface. Esse é o ponto-chave de governança, com a paleta travada, o cliente não insere um roxo aleatório no meio do site corporativo.

### Passo 3: Configure a tipografia em settings.typography

Configure as fontes em `settings.typography.fontFamilies` e os tamanhos em `settings.typography.fontSizes`. Cada fonte recebe fontFamily, slug e name; cada tamanho recebe size, slug e name. Ative `fluid: true` para tipografia responsiva que escala entre breakpoints sem media query manual. Para subir fontes próprias, registre o caminho do arquivo no `fontFace` e confirme o carregamento, processo detalhado no guia de <a href="https://full.services/adicionar-fontes-personalizadas-seu-site-wordpress/">fontes personalizadas no WordPress</a>.

### Passo 4: Aplique os estilos globais no bloco styles

Aplique os valores no bloco `styles`, que é onde os presets viram aparência real. Em `styles.color` você define fundo e texto padrão; em `styles.typography` aplica a fonte base e a altura de linha; em `styles.blocks` você estiliza blocos específicos como `core/button` ou `core/heading`. O WordPress transforma esse bloco no CSS global inline servido no `<head>`, o que mantém o estilo previsível e o cache estável entre deploys.

### Passo 5: Publique e ajuste pelo site editor

Abra o Site Editor em Aparência e use o painel de Estilos para revisar o que o theme.json definiu. Tudo que você declarou no arquivo aparece como ponto de partida, e ajustes feitos na interface são salvos como override de usuário, sem reescrever o arquivo do tema. Para herdar uma referência sólida de estrutura, vale estudar como o <a href="https://full.services/como-usar-wordpress-block-editor-tutorial-gutenberg/">editor de blocos Gutenberg</a> consome esses presets na renderização.

## Hierarquia: Tema-pai, child theme e site editor

A precedência do theme.json sobe em 3 níveis, do tema-pai para o child theme e deste para os ajustes do Site Editor, sempre com o nível mais alto vencendo. O tema-pai define a base; um <a href="https://full.services/glossario/child-theme/">child theme</a> sobrescreve chaves específicas; e o usuário aplica a camada final salva no banco.

O detalhe que derruba sites: quando o child theme declara apenas `"version": 2` sem repetir os settings, o WordPress não herda os presets automaticamente em todos os casos, e a paleta some da interface. Em sites que herdam um <a href="https://full.services/glossario/tema-wordpress/">tema WordPress</a> antigo via filho, esse merge silencioso é a causa de "minhas cores sumiram após atualizar". A correção é declarar os settings que você quer preservar dentro do próprio theme.json do filho, não confiar na herança total. Esse comportamento de <a href="https://full.services/glossario/block-template/">block template</a> e estilos é específico de temas de bloco; temas clássicos só leem um subconjunto do arquivo.

## Customize o tema com governança no bundle FULL

Centralizar o estilo no theme.json é metade do trabalho; manter os plugins de tema atualizados em escala é a outra. No plano PRO da FULL, por R$849 por ano com até 10 sites, o custo cai para R$85 por site e inclui licenças como o Astra PRO e o Elementor PRO já ativadas, sem gerenciar chave em cada instalação.

Veja os <a href="https://full.services/planos">planos da FULL</a> para comparar os níveis. A gente vê no suporte que time que padroniza o tema base e ativa os plugins por bundle erra menos em deploy do que quem licencia avulso site a site, porque o ponto de falha de licença expirada some da operação.

<aside aria-label="Metodologia dos Testes">
<h2 id="metodologia-dos-testes">Metodologia dos testes</h2>
<p>As configurações descritas foram validadas entre <time datetime="2026-02">fevereiro</time> e <time datetime="2026-05">maio de 2026</time>, em instalações com WordPress 6.x, PHP 8.2 e temas de bloco Twenty Twenty-Four e child themes do Astra. Cada chave do theme.json foi testada criando o arquivo do zero, recarregando o Site Editor e comparando o CSS global inline gerado no <code>&lt;head&gt;</code> antes e depois. Os cenários de conflito de Customizer e de herança entre tema-pai e child theme reproduzem padrões recorrentes observados nos tickets de suporte da base FULL, hoje com mais de 150 mil sites conectados à plataforma.</p>
</aside>

<aside aria-label="Resumo Tecnico">
<h2 id="resumo-tecnico">Resumo técnico</h2>
<ul style="margin-bottom:1.5rem">
<li><strong>Melhor cenário:</strong> tema de bloco novo, sem CSS de Customizer legado, paleta declarada uma vez no theme.json.</li>
<li><strong>Pior cenário:</strong> child theme antigo com só version e nenhum setting, herdando merge silencioso do pai.</li>
<li><strong>Principal conflito:</strong> CSS do Customizer concorrendo com styles globais inline, gerando especificidade imprevisível.</li>
<li><strong>Melhor alternativa:</strong> migrar o CSS do Customizer para styles.blocks dentro do próprio theme.json.</li>
<li><strong>Em uma frase:</strong> o theme.json troca CSS espalhado por configuração central quando o tema suporta blocos.</li>
</ul>
</aside>

<p class="wp-caption-text">Legenda: o arquivo theme.json na raiz do tema concentra paleta, tipografia e espaçamento que o editor lê na renderização.</p>

<h2 id="faq">Perguntas frequentes sobre theme.json</h2>

<details>
<summary>Por que o theme.json sobrescreve o CSS do Customizer?</summary>
<p>O theme.json vence porque o WordPress gera estilos globais inline no <code>&lt;head&gt;</code> com especificidade própria, que costuma superar o CSS adicional do Customizer. Quando os dois coexistem, a regra do arquivo prevalece na maioria dos casos e o ajuste do Customizer parece "não funcionar". A correção é migrar essas regras para o bloco styles do theme.json.</p>
</details>

<details>
<summary>É possível customizar o tema com theme.json sem saber CSS?</summary>
<p>Sim, é possível na maior parte dos ajustes: cor, fonte, tamanho e espaçamento são declarados por presets nomeados, sem escrever uma linha de CSS bruto. Você edita pares de chave e valor no formato JSON, como slug e color. Só ajustes muito específicos de seletor ainda pedem CSS direto, e mesmo esses cabem no bloco styles.blocks.</p>
</details>

<details>
<summary>Qual a diferença entre o theme.json do tema-pai e do child theme?</summary>
<p>O theme.json do tema-pai define a base de estilos; o do child theme sobrescreve apenas as chaves que ele repete. A diferença crítica é que a herança não é total: se o filho declara só a version sem settings, o WordPress pode zerar os presets herdados e a paleta some da interface. Declare no filho os settings que precisa preservar.</p>
</details>

<details>
<summary>Quanto tempo leva para aplicar uma paleta de cores via theme.json?</summary>
<p>Aplicar uma paleta leva poucos minutos depois que o arquivo existe: você adiciona de 4 a 8 entradas em settings.color.palette, salva e recarrega o Site Editor. O efeito é imediato no seletor de cor do editor. O tempo maior, quando há, é migrar cores antigas do Customizer, não declarar as novas no arquivo.</p>
</details>

<details>
<summary>O que acontece com o theme.json em temas clássicos sem suporte a blocos?</summary>
<p>Em temas clássicos, o WordPress lê apenas um subconjunto do theme.json, sobretudo as configurações de editor de blocos, e ignora os styles globais que dependem do Site Editor. A paleta pode aparecer no editor, mas o front-end clássico continua governado pelo style.css. Para usar o arquivo por completo, o tema precisa declarar suporte a FULL Site Editing.</p>
</details>

## Próximos passos para dominar o tema por configuração

Migrar o estilo do tema para o theme.json troca improviso de CSS por um contrato técnico que o editor respeita e o cache entende. Comece pela paleta, avance para a tipografia e só então toque na hierarquia entre tema-pai e child theme, validando cada chave no Site Editor antes do deploy. Times que padronizam o tema base reduzem retrabalho, e o ganho fica visível também em <a href="https://full.services/core-web-vitals-wordpress/">Core Web Vitals</a>, já que menos CSS solto significa menos render-blocking. Para aprofundar a criação de temas do zero, o guia de <a href="https://full.services/recursos-para-aprender-a-criar-temas-para-wordpress/">recursos para criar temas WordPress</a> e o <a href="https://full.services/astra-theme-review/">review do tema Astra</a> mostram bases sólidas que já trazem theme.json maduro. Para continuar aprendendo, o FULL Academy reúne tutoriais, guias e reviews de WordPress num só lugar.
