Wordpress

Block pattern não aparece no inseridor: registre pelo arquivo em /patterns

O register_block_pattern está lá no functions.php, roda sem erro nenhum, o cache já foi limpo duas vezes e a aba Padrões do inseridor continua sem o padrão. Na maioria das vezes o motivo é chamada fora do hook init. No WordPress 6.9 dá pra pular esse problema inteiro: um arquivo dentro de patterns/, no tema, que o core lê sozinho.

O arquivo que o WordPress lê sozinho

Crie wp-content/themes/seu-tema/patterns/chamada-botao.php. O cabeçalho de comentário é o registro em si: Title e Slug são obrigatórios, sem um deles o core dispara um _doing_it_wrong e pula o arquivo. O resto entra conforme a necessidade. Logo abaixo do cabeçalho vai a marcação dos blocos, copiada do editor pela opção Copiar todos os blocos.

<?php
/**
 * Title: Chamada com botão
 * Slug: seutema/chamada-botao
 * Description: Faixa de destaque com título, texto curto e botão.
 * Categories: banner, call-to-action
 * Keywords: chamada, cta, destaque
 * Viewport Width: 1280
 * Inserter: yes
 */?>

Funciona em tema de blocos e em tema clássico, e vale também pro tema pai: o core varre a pasta dos dois no init e deixa o filho sobrescrever o slug repetido. Não precisa de hook nem de add_theme_support.

As armadilhas que sobram

  • Inserter: no registra o padrão mas some com ele do inseridor. Só use isso em padrão que serve de área de template ou que é preso a um bloco.
  • Slug sem namespace funciona, mas colide com padrão de plugin de mesmo nome. Prefixe com o tema.
  • Desde o 6.4 os padrões do tema ficam em cache. Enquanto você edita o arquivo, ligue o modo de desenvolvimento no wp-config.php.
define( 'WP_DEVELOPMENT_MODE', 'theme' );

# conferir o que está registrado de verdade
sudo -u www-data wp eval 'foreach (WP_Block_Patterns_Registry::get_instance()->get_all_registered() as $p) { echo $p["name"], PHP_EOL; }'

Se o slug sair nessa lista e mesmo assim não aparecer no editor, olhe a categoria: categoria que ninguém registrou não vira aba própria, e o padrão fica só na listagem geral, onde ninguém procura.

Se travou nisso e precisa de ajuda, me chama aqui.

Post Recentes

cron_schedules WordPress: intervalo de 5 minutos no WP-Cron

O WordPress só oferece hourly, twicedaily, daily e weekly. Use o filtro cron_schedules para criar um intervalo de 5 minutos…

17 horas atrás

E-mails do WooCommerce não chegam: como testar o envio de um pedido real

Dispare pela linha de comando o e-mail de um pedido que já existe na loja e descubra se a falha…

24 horas atrás

CodeIgniter 4 tela branca: CI_ENVIRONMENT e o erro que sumiu

Página em branco no CodeIgniter 4, sem nenhuma mensagem? O ambiente está em production e escondeu o erro. Troque o…

2 dias atrás

Google Consent Mode v2 no WordPress: default denied antes do gtag rodar

O Google Ads acusa consentimento ausente porque o gtag sobe antes do banner. Veja como injetar o default denied do…

3 dias atrás

Módulos PHP 8.3 faltando na Saúde do site do WordPress: como instalar

A tela Saúde do site avisa que faltam extensões como intl, imagick ou zip: instale no PHP 8.3, reinicie o…

3 dias atrás

Caso de teste PHPUnit a partir do bug: do relato solto para o teste que falha

Chegou um chamado sem passo a passo e sem exemplo. Veja como virar esse relato em um caso de teste…

4 dias atrás