0
67

SHARE

Uso de Slots e Templates Personalizados

Aprenda a definir templates e estruturar blocos no Gutenberg com InnerBlocks e templateLock, criando layouts prontos para uso
Este post é a parte 17 de 20 da Série WordPress Extremo: Gutenberg + React + Blocos Customizados

Fala, dev! 👋

Hoje vamos subir mais um degrau na criação de blocos Gutenberg com React. Vamos explorar dois recursos poderosos para criar blocos complexos e reutilizáveis:

  • Slots: permitem organizar conteúdo filho de maneira controlada.
  • Templates personalizados: definem a estrutura inicial de InnerBlocks com blocos e atributos pré-configurados.

Esses recursos são muito úteis quando você precisa garantir uma estrutura específica para os blocos internos ou quer facilitar a criação de layouts padronizados.


🧠 Cenário prático: Bloco de Card com título, imagem e conteúdo

Vamos criar um bloco wp24h/card com três áreas distintas:

  • Um título (heading)
  • Uma imagem (image)
  • Um conteúdo (paragraph)

Essas áreas serão controladas com template e templateLock, garantindo que o usuário não quebre o layout principal.


🧱 Estrutura de arquivos

blocks/
└── cardnovo/
    ├── block.json
    ├── index.js
    ├── edit.js
    ├── save.js
    └── style.css

📦 block.json

{
  "apiVersion": 2,
  "name": "wp24h/cardnovo",
  "title": "Card Novo",
  "category": "design",
  "icon": "format-image",
  "supports": {
    "html": false
  },
  "editorScript": "file:../../dist/cardnovo.js",
  "style": "file:./style.css",
  "editorStyle": "file:./style.css"
}

✍️ edit.js com Template

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

const TEMPLATE = [
  ['core/heading', { placeholder: 'Título do card' }],
  ['core/image'],
  ['core/paragraph', { placeholder: 'Descrição do card...' }]
];

export default function Edit() {
  return (
    <div {...useBlockProps({ className: 'cardnovo' })}>
      <InnerBlocks
        template={TEMPLATE}
        templateLock="all" // ou "insert" para permitir edição mas bloquear adição
      />
    </div>
  );
}

💾 save.js

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

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

🎨 style.css

.cardnovo {
  border: 1px solid #ccc;
  border-radius: 8px;
  padding: 20px;
  background-color: #fff;
  box-shadow: 0 2px 8px rgba(0,0,0,0.05);
  max-width: 480px;
}
.cardnovo h2 {
  margin-top: 0;
}
.cardnovo img {
  max-width: 100%;
  height: auto;
  border-radius: 6px;
}

📦 index.js

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

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

💡 Slots vs Template

RecursoAplicação
InnerBlocks com templateDefine estrutura fixa ou orientada para os filhos
templateLock'all', 'insert', 'false' para travar ou permitir ajustes
Slots avançados (React + contexto)Exigem implementação manual com props, context ou composição de componentes (não padrão do core ainda)

🧪 Resultado

Você terá um bloco de card padronizado, com três áreas definidas, protegidas contra alterações acidentais e que guiam o usuário a preencher corretamente.

Navegação<< Scripts e Estilos Condicionais: Carregando apenas quando necessárioInserindo Blocos via Código ou Shortcodes >>

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
Listagem e Detalhes de Posts WordPress com API REST no Next.js

Listagem de Posts e Roteamento Dinâmico no Next.js

Frontend com Next.js - Setup e Integração Inicial com WordPress

Frontend com Next.js: Setup e Integração Inicial

Configurando o WordPress como Backend Headless

Configurando o WordPress como Backend Headless

REST API do WordPress

REST API do WordPress: Visão Geral

Introdução ao WordPress Headless

Introdução ao WordPress Headless

Como Distribuir Seus Blocos Gutenberg em Plugins ou no GitHub

Distribuindo Seus Blocos: Plugins, Repositório e GitHub

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!