Wordpress

theme.json: fonte personalizada no tema de blocos do WordPress 6.9

Você copiou o inter-variable.woff2 pra assets/fonts/, escreveu o @font-face no style.css e o seletor de tipografia do editor continua mostrando as três fontes de sempre. Num tema de blocos o editor não lê o seu CSS, ele lê o theme.json: enquanto a família não estiver declarada lá, ela não existe pros Estilos Globais.

O bloco que faltava

{
  "$schema": "https://schemas.wp.org/trunk/theme.json",
  "version": 3,
  "settings": {
    "typography": {
      "fontFamilies": [
        {
          "name": "Inter",
          "slug": "inter",
          "fontFamily": "Inter, system-ui, sans-serif",
          "fontFace": [
            {
              "fontFamily": "Inter",
              "fontWeight": "400 700",
              "fontStyle": "normal",
              "fontDisplay": "swap",
              "src": [ "file:./assets/fonts/inter-variable.woff2" ]
            }
          ]
        }
      ]
    }
  }
}

O version 3 é o esquema atual do WordPress 6.9. É o array fontFace que faz o núcleo imprimir a regra @font-face no front e no editor. Sem ele o nome aparece no seletor, mas o navegador cai no fallback e ninguém entende por quê.

O prefixo file:./ passa pelo get_theme_file_uri(): procura na pasta do tema filho e, se não achar, cai pra do pai. Dá pra deixar o .woff2 só no pai; errou o caminho nos dois, sai a URL do pai assim mesmo e o navegador toma 404.

Usando o slug no CSS

body {
    font-family: var(--wp--preset--font-family--inter);
}

O nome da variável sai direto do slug. Trocou o slug, quebrou o CSS de quem já usava a variável antiga — escolha um slug curto e não mexa depois.

Editou o theme.json e nada mudou? Antes de culpar o cache, olhe os Estilos Globais: fonte escolhida pelo editor de site fica salva no post type wp_global_styles e ganha do arquivo — redefinir para os padrões, no painel Estilos, limpa isso.

O cache do theme.json fica num grupo não persistente, então wp cache flush não muda nada aqui; enquanto você ajusta, ponha define('WP_DEVELOPMENT_MODE', 'theme'); no wp-config.php e o núcleo ignora esse cache. E confira no DevTools se o .woff2 volta 200: um location ~* .(woff2)$ mal escrito no nginx derruba a fonte com 404 e o sintoma parece o mesmo.

Post Recentes

wp_postmeta lento: índice em meta_key e meta_value para meta_query

Listagem de CPT com meta_query que demora segundos: veja o EXPLAIN da query do WP_Query e o índice composto em…

17 horas atrás

WP-Cron travado: eventos agendados que não rodam no WordPress 6.9

Post com Perdeu o agendamento e backup que não roda há dias: inspecione a fila do WP-Cron, apague a trava…

1 dia atrás

Desligar o AMP no WordPress 6.9: redirect do /amp/ sem perder tráfego

Como aposentar o plugin AMP sem transformar centenas de URLs /amp/ indexadas em 404: o rewrite 301 no nginx, a…

2 dias atrás

Redis OOM Magento 2: ajustar a maxmemory-policy e separar os bancos

A loja cai com OOM command not allowed when used memory > maxmemory: ajuste a maxmemory-policy do Redis e separe…

2 dias atrás

Checkbox de privacidade no checkout do WooCommerce: texto e registro do aceite

Adicione a caixa de aceite no checkout do WooCommerce e grave data e versão da política como meta do pedido,…

3 dias atrás

json_validate no PHP 8.3: conferir se o JSON é válido sem decodificar

A função json_validate do PHP 8.3 diz se a string é JSON válido sem montar array nem objeto. Serve para…

3 dias atrás