ID: 0x

|

DATE:

create-block: o guia para criar blocos do WordPress

AUTHOR:

|

READ_TIME: ~5 MIN

Atualizado em maio de 2026.

Gravei um vídeo sobre o @wordpress/create-block quando ele ainda estava na versão 2.0. De lá para cá a ferramenta amadureceu bastante: hoje está na linha 4.89, ganhou um sistema de variants, suporte a templates externos e já nasce alinhada às novidades de performance do WordPress 6.8. Neste guia, atualizado, vou mostrar como criar um bloco do zero com a versão atual da ferramenta.

O que é o create-block

O @wordpress/create-block é o pacote Node oficial para fazer o scaffolding (a estrutura inicial) de um bloco do Gutenberg. Com um único comando você recebe um plugin funcional: o block.json, o processo de build já configurado via @wordpress/scripts e os arquivos de edição e exibição do bloco. É, no mundo dos blocos, o equivalente ao que ferramentas como o create-react-app foram para o React: você pula toda a configuração e já começa a escrever código.

Requisitos

A versão atual exige um ambiente Node recente. Antes de começar, confirme:

  • Node.js 20.10.0 ou superior
  • npm 10.2.3 ou superior

Você pode checar com node -v e npm -v. Se as versões forem mais antigas, o próprio create-block avisa antes de continuar.

Criando seu primeiro bloco

Não é preciso instalar nada globalmente. O comando recomendado é:

npx @wordpress/create-block@latest meu-primeiro-bloco
cd meu-primeiro-bloco
npm startCode language: CSS (css)

Use sempre o @latest no final do pacote — assim o npx não reaproveita uma versão antiga que tenha ficado em cache.

Uma dica útil: se você rodar o comando sem informar o nome do bloco, o create-block entra em modo interativo e pergunta passo a passo o título, o namespace, a descrição e a variant do bloco. É a forma mais simples para quem está começando.

As opções da linha de comando

O create-block aceita uma série de flags para personalizar o projeto. Estas são as principais da versão atual:

OpçãoO que faz
-V, --versionMostra a versão do create-block instalada.
-t, --templateTemplate do projeto: standard (padrão), es5, um pacote npm externo ou um diretório local.
--variantEscolhe a variant do template (ex.: static ou dynamic).
--no-pluginGera apenas os arquivos do bloco, sem criar a estrutura de plugin.
--target-dirDefine a pasta onde os arquivos serão criados.
--namespacePrefixo interno do nome do bloco.
--titleTítulo exibido para o bloco.
--short-descriptionDescrição curta do bloco e do plugin.
--categoryCategoria em que o bloco aparece no editor.
--wp-scripts / --no-wp-scriptsAtiva ou desativa a integração com o @wordpress/scripts.
--wp-envAtiva a integração com o @wordpress/env (ambiente local via Docker).
--textdomainDefine o text domain para internacionalização.
-h, --helpMostra a ajuda com todas as opções.

Variants: bloco estático ou dinâmico

Os templates embutidos oferecem duas variants, que definem como o bloco gera sua saída:

  • static (padrão) — toda a saída é renderizada no save.js e o HTML fica salvo no banco de dados. Ideal para blocos cujo conteúdo não muda depois de publicado.
  • dynamic — adiciona um render.php ao projeto; a saída do front-end é gerada por PHP a cada carregamento. Use quando o conteúdo muda com o tempo: listas de posts recentes, dados vindos de uma API, a data atual, etc.

Para criar um bloco dinâmico:

npx @wordpress/create-block@latest meu-bloco --variant dynamicCode language: CSS (css)

Blocos interativos com a Interactivity API

A maior novidade desde aquele vídeo de 2021 é a Interactivity API — o padrão do WordPress para adicionar interatividade no front-end dos blocos sem você ter que montar o próprio JavaScript do zero.

Os templates embutidos do create-block não geram blocos interativos. Para isso existe um template externo oficial:

npx @wordpress/create-block@latest meu-bloco-interativo --template @wordpress/create-block-interactive-templateCode language: CSS (css)

Esse template tem variants próprias: default, typescript e client-side-navigation — esta última já gera um bloco com navegação client-side completa (roteamento, navegação entre páginas e indicador de carregamento). Se você omitir o nome do bloco, o create-block pergunta qual variant usar.

Templates externos

Como vimos acima, a opção --template aceita muito mais do que os templates embutidos: você pode passar qualquer pacote npm ou o caminho de um diretório local. Isso permite que a comunidade — e você — criem templates reaproveitáveis.

Os dois templates oficiais mantidos pela equipe do WordPress são:

  • @wordpress/create-block-tutorial-template — gera o bloco “Copyright Date” usado no guia oficial de criação de blocos. Ótimo para aprender.
  • @wordpress/create-block-interactive-template — gera blocos com a Interactivity API, como mostrado acima.

Os comandos do projeto

Depois do scaffolding, o package.json do projeto vem com estes scripts:

ComandoO que faz
npm startInicia o ambiente de desenvolvimento com recompilação automática.
npm run buildCompila o código para produção.
npm run formatFormata todos os arquivos do projeto.
npm run lint:jsVerifica os arquivos JavaScript.
npm run lint:cssVerifica os arquivos de estilo.
npm run packages-updateAtualiza os pacotes do WordPress usados no projeto.
npm run plugin-zipGera um arquivo ZIP do projeto em formato de plugin, pronto para distribuir.

Se você usou a flag --wp-env, também terá o comando npm run env para subir o ambiente local com Docker.

Um detalhe que mudou: hoje os scripts build e start já incluem a flag --blocks-manifest automaticamente. Tutoriais antigos pediam para adicioná-la na mão — não é mais necessário.

Registro eficiente de blocos no WordPress 6.8

Esse --blocks-manifest tem um motivo. O plugin gerado pelo create-block hoje registra os blocos com a função wp_register_block_types_from_metadata_collection(), introduzida no WordPress 6.8:

wp_register_block_types_from_metadata_collection(
    __DIR__ . '/build',
    __DIR__ . '/build/blocks-manifest.php'
);Code language: PHP (php)

Em vez de ler vários arquivos block.json do disco, o WordPress lê um único manifesto (blocks-manifest.php) gerado no build. O ganho de performance é especialmente relevante em plugins com muitos blocos. É por isso que o block.json gerado já vem com apiVersion: 3 e requiresAtLeast: 6.8.

Conclusão

O create-block deixou de ser apenas um gerador de “esqueleto” e virou a porta de entrada recomendada para qualquer projeto de bloco — do bloco estático mais simples ao bloco interativo com a Interactivity API. Em vez de decorar números de versão, vale guardar o essencial: rode npx @wordpress/create-block@latest, escolha a variant certa para o seu caso e deixe a ferramenta cuidar do build.

Se quiser ver o processo na prática, confira também os outros posts sobre desenvolvimento de blocos aqui no blog.


ENCODING: UTF-8

|

CHMOD: 644

// RELATED_ENTRIES

NEXT_READS

> cat ./comments.log

LOADING_ENTRIES…


> write ./comments.log –append

Deixe um comentário

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