Wordpress

Template part não aparece: parts/header.html e o theme.json do tema de blocos

O arquivo parts/header.html está lá no tema de blocos, mas o Editor de Site não lista a parte em Cabeçalhos — ou o modelo abre com o topo vazio. O WordPress 6.9 acha o arquivo sozinho; sem declaração, porém, ele entra na área uncategorized e fica fora de qualquer agrupamento de cabeçalho.

Declare a parte no theme.json

O array templateParts fica na raiz do arquivo, no mesmo nível de settings e styles. O name é o nome do arquivo sem a extensão:

{
  "$schema": "https://schemas.wp.org/trunk/theme.json",
  "version": 3,
  "templateParts": [
    { "name": "header", "title": "Cabeçalho", "area": "header" },
    { "name": "footer", "title": "Rodapé",   "area": "footer" }
  ]
}

As áreas registradas por padrão são header, footer e uncategorized; qualquer outra é ignorada em silêncio, a não ser que você acrescente a sua pelo filtro default_wp_template_part_areas. E o tema só conta como tema de blocos se existir templates/index.html. Dentro desse modelo a parte entra como um bloco wp:template-part com {"slug":"header","tagName":"header"} — o editor escreve isso sozinho quando você insere o bloco Parte do modelo.

A armadilha: o banco ganha do arquivo

Se alguém já editou o cabeçalho pelo Editor de Site, o WordPress gravou um post do tipo wp_template_part e passa a servir essa cópia. Mexer no HTML do tema não muda nada até você remover a personalização:

sudo -u www-data wp post list --post_type=wp_template_part 
  --fields=ID,post_name,post_status

# confira o ID na listagem: o --force pula a lixeira e não tem volta
sudo -u www-data wp post delete 1234 --force
sudo -u www-data wp cache flush

Pelo painel dá no mesmo, e sem risco de apagar o post errado: abra a parte no Editor de Site e use Limpar personalizações. Depois disso o arquivo volta a mandar, e aí sim vale versionar parts/ no Git sem alguém sobrescrever pelo admin.

Post Recentes

CLS no WordPress: imagem sem width e height pulando a página no mobile

Como matar o aviso "Image elements do not have explicit width and height" do Lighthouse trocando o img manual do…

1 dia atrás

CSRF no CodeIgniter 4: The action you requested is not allowed no AJAX

O primeiro POST via AJAX passa e o segundo estoura 403 porque o token foi regenerado. Envie o hash no…

2 dias atrás

Certbot renew sem reload do nginx: o navegador ainda vê o certificado vencido

O certbot diz que renovou, o navegador insiste que o certificado expirou. Compare as datas com openssl e crie o…

2 dias atrás

Campo bloqueado no admin do Magento 2: config travada pelo env.php

O campo aparece cinza no painel avisando que o valor vem de arquivo? Descubra o caminho da chave, remova do…

3 dias atrás

array_filter no PHP apaga o 0 junto: como filtrar só o que é vazio

Chamar array_filter sem callback descarta 0, '0' e false junto com os vazios. Veja o callback certo, o ARRAY_FILTER_USE_BOTH e…

4 dias atrás

413 Request Entity Too Large no WordPress: ajuste nginx e PHP-FPM juntos

O upload do tema ou do vídeo morre com 413 e o php.ini não resolve? Quem corta é o nginx:…

4 dias atrás