0
10

SHARE

Blocos Reutilizáveis com InnerBlocks no Gutenberg

Blocos Reutilizáveis com InnerBlocks no Gutenberg

Aprenda a criar blocos Gutenberg reutilizáveis com InnerBlocks. Permita que o usuário insira outros blocos dinamicamente no seu container personalizado.
Este post é a parte 12 de 12 da Série WordPress Extremo: Gutenberg + React + Blocos Customizados

Fala, pessoal! 👋
Aqui é o Asllan Maciel e hoje vamos falar sobre um recurso poderosíssimo do Gutenberg: o InnerBlocks.

Se você já pensou em montar áreas customizadas dentro de um bloco, onde o usuário pode inserir outros blocos livremente (como se fosse uma seção do Elementor ou Bricks), essa é a peça que faltava.

Vamos criar um Container Personalizado onde será possível adicionar qualquer outro bloco dentro. Bloco de texto? Imagem? Vídeo? O que quiser!

Bora pro código? 🚀


🧠 O que são InnerBlocks?

O InnerBlocks é um componente especial do Gutenberg que permite definir áreas “editáveis” dentro de um bloco personalizado.

Ele serve para:

✅ Criar blocos “container” com conteúdo flexível
✅ Permitir composição de layouts complexos
✅ Dar liberdade ao usuário, mas com estrutura


📦 Estrutura de arquivos

No seu plugin, crie a pasta do bloco:

blocks/
└── container/
    ├── block.json
    ├── edit.js
    ├── index.js
    ├── save.js

📄 block.json

{
  "apiVersion": 2,
  "name": "wp24h/container",
  "title": "Container Personalizado",
  "category": "design",
  "icon": "columns",
  "description": "Um container que pode receber qualquer bloco dentro.",
  "supports": {
    "html": false
  },
  "editorScript": "file:../../dist/container.js"
}

✏️ edit.js

import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';

export default function Edit() {
  return (
    <div {...useBlockProps({ className: 'wp24h-container' })}>
      <InnerBlocks />
    </div>
  );
}

💾 save.js

import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';

export default function save() {
  return (
    <div {...useBlockProps.save()}>
      <InnerBlocks.Content />
    </div>
  );
}

📌 index.js

import { registerBlockType } from '@wordpress/blocks';
import edit from './edit';
import save from './save';
import metadata from './block.json';

registerBlockType(metadata.name, {
  ...metadata,
  edit,
  save
});

⚙️ Atualizando o webpack.config.js

entry: {
  'card': path.resolve(__dirname, 'blocks/card/index.js'),
  'hello': path.resolve(__dirname, 'blocks/hello/index.js'),
  'posts': path.resolve(__dirname, 'blocks/posts/index.js'),
  'custom-data': path.resolve(__dirname, 'blocks/custom-data/index.js'),
  'container': path.resolve(__dirname, 'blocks/container/index.js'), // novo bloco
},

Não esqueça que precisamos atualizar o Init também:

public function register_blocks()
    {
        $blocks = ['card', 'hello', 'custom-data', 'container']; //Aqui

        foreach ($blocks as $block) {
            $asset_path = __DIR__ . "/../../dist/{$block}.asset.php";
            if (!file_exists($asset_path)) continue;

            $asset = include $asset_path;

            wp_register_script(
                "wp24h-{$block}",
                plugins_url("dist/{$block}.js", dirname(__DIR__, 2)),
                $asset['dependencies'],
                $asset['version']
            );

            register_block_type(__DIR__ . "/../../blocks/{$block}", [
                'editor_script' => "wp24h-{$block}"
            ]);
        }
    }

🧪 Testando

npm run build

E pronto! Agora você pode adicionar o bloco “Container Personalizado” no editor e dentro dele adicionar qualquer outro bloco Gutenberg.


🔁 Extensões possíveis

Você pode limitar os blocos permitidos no InnerBlocks:

<InnerBlocks allowedBlocks={['core/paragraph', 'core/image']} />

Ou criar layouts predefinidos com template:

<InnerBlocks
  template={[['core/paragraph', { placeholder: 'Escreva aqui...' }]]}
/>

✍️ Conclusão

Com InnerBlocks, você abre um novo mundo de possibilidades no Gutenberg: blocos reutilizáveis, seções personalizadas, composição visual e muito mais.

Quer criar um sistema de layouts flexíveis no seu plugin? Comece aqui.

Navegação<< Salvando Dados Personalizados no Backend via REST API

Não perca mais nenhuma atualização aqui!

Ative as Notificações!

Clique aqui e, em seguida, clique em Permitir na caixa que aparecerá na parte superior da janela, próximo à barra de endereços.

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! Ao se tornar um assinante do WP24Horas, você terá acesso a:

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!

Não perca mais nenhuma atualização aqui!

Tabela de Conteúdo
PUBLICIDADE
Últimos Posts
Como Salvar Dados Personalizados no WordPress Usando Blocos Gutenberg e REST API

Salvando Dados Personalizados no Backend via REST API

Checklist Final de Publicação - WordPress.org e Produção

Checklist Final de Publicação: WordPress.org e Produção

Atualizações Automáticas de Plugin WordPress via GitHub

Atualizações Automáticas via GitHub.

Separação Clara de Camadas - Core, Domain e Infra

Separação Clara de Camadas: Core, Domain e Infra

Como Criar Permissões Customizadas e Controle de Acesso em Plugins WordPress

Permissões Customizadas e Controle de Acesso em Plugins WordPress

Criando Settings Pages Profissionais no WordPress

Criando Settings Pages Profissionais no WordPress

Você precisa estar logado para ver esta informação.

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! 

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!