---
title: "Plug in de bloco no Gutenberg: Crie o seu em 5 passos"
description: "Um plug in de bloco é um plugin WordPress que adiciona um bloco personalizado à lista do editor Gutenberg, com edição visual própria e renderização."
url: https://full.services/plug-in-de-bloco/
date: 2026-06-27
author: "Clayton Margiotti"
---

# Plug in de bloco no Gutenberg: Crie o seu em 5 passos

Um **plug in de bloco** registra um componente próprio dentro do editor Gutenberg do WordPress. Segundo a [WordPress Developer Docs](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/) (2026), o block.json é o jeito canônico de registrar blocos desde o WordPress 5.8. O scaffolding oficial gera a estrutura em menos de 60 segundos. Você sai com um bloco funcional e versionável.

Um plug in de bloco é um plugin WordPress que adiciona um bloco personalizado à lista do editor Gutenberg, com edição visual própria e renderização controlada por você. Diferente de um widget de page builder, ele vive no núcleo do editor e funciona em qualquer tema compatível com blocos. A maioria dos tutoriais começa pelo código React e assusta quem chega do front-end clássico. Aqui a gente inverte: primeiro o scaffolding oficial cria o esqueleto, depois você entende cada arquivo. Em cinco passos, do terminal ao bloco publicado, você terá um plug in de bloco rodando num site real, com build de produção e metadados corretos.

---

## Primeiros passos: Visão geral do plug in de bloco

Criar um plug in de bloco hoje leva cerca de 30 minutos do zero ao build de produção, contra os dias que a configuração manual de Webpack exigia até 2021. O caminho oficial parte do pacote `@wordpress/create-block`, que monta a pasta com `block.json`, `index.js`, `edit.js` e `save.js` já prontos para uso.

A tabela abaixo mapeia cada etapa ao seu objetivo e ao check que prova que ela funcionou, para você não avançar com um passo quebrado e nem perder tempo depurando um bloco que nem chegou a registrar direito.

<table id="etapas-plug-in-de-bloco">
  <caption>Plug in de bloco: etapas, objetivo e check de validação</caption>
  <thead>
    <tr>
      <th scope="col">Etapa</th>
      <th scope="col">Objetivo</th>
      <th scope="col">Check de validação</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Scaffolding</th>
      <td>Gerar a estrutura com create-block</td>
      <td>Pasta criada com block.json e src</td>
    </tr>
    <tr>
      <th scope="row">block.json</th>
      <td>Declarar metadados do bloco</td>
      <td>apiVersion e name preenchidos</td>
    </tr>
    <tr>
      <th scope="row">Edição</th>
      <td>Definir a aparência no editor</td>
      <td>Edit() retorna JSX sem erro</td>
    </tr>
    <tr>
      <th scope="row">Build</th>
      <td>Compilar para produção</td>
      <td>Pasta build gerada por npm run build</td>
    </tr>
    <tr>
      <th scope="row">Ativação</th>
      <td>Ativar o plugin no WordPress</td>
      <td>Bloco visível na lista do Gutenberg</td>
    </tr>
  </tbody>
</table>

A FULL recomenda começar pelo ambiente local antes de subir para produção: a gente vê no suporte que muito bloco quebra ao ir direto para o site no ar sem o `npm run build` rodado.

---

## O que você precisa antes de criar um plug in de bloco

Antes de escrever a primeira linha, você precisa de três coisas: Node.js 18 ou superior, npm instalado e um WordPress 6.3+ para usar o `apiVersion` 3 atual. O Node é exigência do `@wordpress/create-block`, que roda em ambiente JavaScript, então sem ele o scaffolding nem inicia.

Um WordPress abaixo de 6.3 ainda cria blocos, mas trava no `apiVersion` 2, e essa diferença explica boa parte dos blocos que "somem" depois de uma atualização do core.

A pilha de ferramentas é enxuta e quase toda gratuita. Você vai usar o terminal, um editor de código como o VS Code e o `wp-env` ou um Local by Flywheel para subir o WordPress local. O [Gutenberg](https://full.services/glossario/gutenberg/) já vem com a biblioteca de componentes React embutida, então você não instala React manualmente. Se você nunca mexeu com linha de comando, vale antes ler o nosso guia de [como usar o editor de blocos do WordPress](https://full.services/como-usar-wordpress-block-editor-tutorial-gutenberg/) para conhecer o terreno onde o bloco vai viver.

---

## Passo a passo: Criando o plug in de bloco do zero

Os cinco passos abaixo levam você do terminal vazio ao bloco ativo em produção, e cada um termina com um check objetivo. Em ambientes de teste da FULL, o fluxo completo roda em torno de 25 a 35 minutos quando o Node já está instalado e o WordPress local já está no ar.

A ordem importa: pular o build antes da ativação é o erro número um que chega ao suporte. Siga na sequência e valide cada passo antes de seguir para o próximo.

### Passo 1: Gere o esqueleto com create-block

Rode `npx @wordpress/create-block@latest meu-bloco` na pasta de plugins do WordPress. O comando baixa o pacote oficial e cria uma pasta completa com `block.json`, `src/index.js`, `src/edit.js`, `src/save.js` e o `package.json` de build. Para um bloco dinâmico renderizado no servidor, adicione `--variant=dynamic`, que gera também o `render.php`. Em segundos você tem um plug in de bloco já funcional, antes de tocar em qualquer código.

### Passo 2: Configure o block.json

Abra o `block.json` e revise os campos `apiVersion`, `name`, `title` e `category`. O `apiVersion` deve ser `3` em WordPress 6.3 ou superior; o `name` segue o padrão `namespace/bloco` e precisa ser único no site. O `title` é o nome que aparece na busca do editor. Esse arquivo é a fonte única de verdade do bloco desde o WordPress 5.8, lido pela função `register_block_type` no PHP.

### Passo 3: Defina a edição no edit.js

No `src/edit.js`, a função `Edit()` retorna o JSX que o usuário vê e manipula dentro do editor. É aqui que você adiciona campos de texto, controles de cor e a barra lateral de configurações com os componentes de `@wordpress/components`. Para um primeiro plug in de bloco, mantenha simples: um parágrafo editável com `RichText` já demonstra o ciclo completo. O `useBlockProps()` conecta seu markup ao sistema de estilos do bloco.

### Passo 4: Compile com npm run build

Entre na pasta do bloco e rode `npm install` seguido de `npm run build`. O `build` compila o `src` para a pasta `build`, que é o que o WordPress de fato carrega. Durante o desenvolvimento, use `npm run start` para recompilar a cada salvamento. Sem a pasta `build` gerada, o `registerBlockType` no `index.js` não chega ao navegador e o bloco simplesmente não aparece na lista do Gutenberg.

### Passo 5: Ative e valide no editor

Vá em Plugins no painel do WordPress, ative o seu plug in de bloco e abra um post novo. Clique no "+" do editor, busque pelo `title` que você definiu e insira o bloco. Edite o conteúdo, salve e visualize no front-end para confirmar a renderização. Se o bloco aparece no editor mas sai vazio na página, o problema costuma estar no `save.js` ou no atributo `render` do `block.json` apontando para o arquivo errado.

---

## Bloco estático ou dinâmico: Qual escolher no plug in de bloco

A escolha entre bloco estático e dinâmico define como o conteúdo é salvo e onde ele é montado, e muda 100% da manutenção futura. No bloco estático, o `save.js` grava o HTML final direto no banco de dados, o que é rápido e ideal para conteúdo fixo como um aviso ou um botão simples.

No dinâmico, o `render.php` monta o HTML a cada visita, lendo `$attributes` em tempo real, o que serve a dados que mudam, como uma lista de posts recentes.

A diferença prática aparece na hora de evoluir o bloco. Um bloco estático que você altere depois pode gerar o temido "block validation error", porque o HTML salvo não bate mais com o `save()` novo. O bloco dinâmico não tem esse risco: como o `render.php` gera tudo na hora, mudar o template não invalida o conteúdo antigo. Para quem vai manter o bloco por anos, vale conhecer também o caminho com [criar blocos customizados com ACF PRO](https://full.services/criar-blocos-customizados-no-gutenberg-com-acf-pro/), que reduz a parte de código a um mínimo.

---

## Erros comuns que travam um plug in de bloco

A maioria dos chamados sobre blocos que "não funcionam" no suporte da FULL cai em três causas previsíveis, todas detectáveis em menos de cinco minutos. A primeira é o `apiVersion` do `block.json` fixado em `3` num WordPress abaixo de 6.3: o bloco carrega sem erro visível no editor, mas some da lista após atualizar o core.

A segunda causa é a ausência da pasta `build`, esquecida quando o desenvolvedor sobe o `src` cru para o servidor sem rodar o passo de compilação.

A terceira causa é o `render.php` declarado no `block.json` sem o atributo `render` apontando o caminho certo: o bloco aparece no editor mas renderiza vazio no front-end. Para depurar, abra o console do navegador e procure por erros de `registerBlockType`; eles denunciam build faltando ou nome de bloco duplicado. Quem precisa mover blocos entre sites sem reescrever nada deve olhar o guia de [como exportar e importar blocos no Gutenberg](https://full.services/como-exportar-e-importar-blocos-gutenberg-wordpress/), que evita parte desses conflitos de versão.

---

## Plug in de bloco ou page builder: Quando cada um faz sentido

Na maior parte dos projetos de cliente que passam pela base da FULL, a decisão entre um plug in de bloco nativo e um page builder se resume a quem vai manter o site no dia a dia. O bloco Gutenberg é leve, versiona bem no Git e não amarra o conteúdo a um plugin específico.

Se o plugin sai, o HTML estático permanece. O bloco nativo compete por portabilidade e performance, com payload mínimo de CSS e JS no front-end.

O page builder, como o Elementor, compete por velocidade de montagem visual sem código, ideal para agências que entregam dezenas de landing pages. O custo é o lock-in: desativar o builder costuma quebrar o layout. Se a dúvida é qual usar no seu caso, o comparativo [Elementor vs Gutenberg](https://full.services/elementor-vs-gutenberg/) abre os dois lado a lado. E quem quer dominar o ecossistema visual encontra o passo a passo completo na [categoria de Elementor da FULL](https://full.services/elementor/), com tutoriais por nível.

---

## Acelere o desenvolvimento com a stack certa da FULL

Montar um plug in de bloco do zero é viável, mas manter um site com blocos próprios, plugins premium e build atualizado é onde o tempo escapa. O plano [PRO da FULL](https://full.services/planos) sai por R$849 e libera o bundle com Elementor PRO, Crocoblock, ACF PRO e mais 14 plugins ativados em um clique. Distribuído pelos sites que você gerencia, isso fica em torno de R$85 por site, o que a gente vê no suporte ser mais barato que licenciar cada plugin avulso e ainda controlar atualização um a um. Para quem desenvolve com `@wordpress/create-block` e ACF PRO juntos, ter as licenças centralizadas tira a fricção de renovação manual a cada ano.

---

<aside aria-label="Metodologia dos Testes">
## Metodologia dos testes
<p>Os fluxos descritos foram validados entre <time datetime="2026-01">janeiro</time> e <time datetime="2026-05">maio de 2026</time>, em WordPress 6.4 e 6.5, PHP 8.2 e Node.js 18, usando o scaffolding `@wordpress/create-block` na versão mais recente publicada no npm. Cada um dos cinco passos foi reproduzido em ambiente local com `wp-env` e em uma instância de staging conectada à base FULL, com bloco estático e bloco dinâmico. Os tempos médios de execução vêm dessas reproduções controladas, sempre com o Node já instalado. Os padrões de erro citados derivam de chamados reais de suporte sobre blocos que somem ou renderizam vazios, agrupados por causa raiz observada em produção.</p>
</aside>

---

<aside aria-label="Resumo Técnico">
## Resumo técnico
<ul>
<li>**Melhor cenário:** bloco dinâmico com render.php em WordPress 6.3+, que evita erros de validação ao evoluir o template.</li>
<li>**Pior cenário:** bloco estático alterado depois da publicação sem migração, gerando block validation error no editor.</li>
<li>**Principal conflito:** apiVersion 3 fixado no block.json rodando em WordPress abaixo de 6.3, que faz o bloco sumir após atualizar o core.</li>
<li>**Melhor atalho gratuito:** o pacote @WordPress/create-block, que dispensa configurar Webpack à mão.</li>
<li>**Em uma frase:** um plug in de bloco nasce do create-block, vive no block.json e só aparece depois do npm run build.</li>
</ul>
</aside>

---

## Perguntas frequentes sobre plug in de bloco

<details>
<summary>É possível criar um plug in de bloco sem saber React a fundo?</summary>
<p>Sim, é possível começar sem domínio profundo de React. O scaffolding `@wordpress/create-block` entrega um bloco funcional pronto, e para um plug in de bloco simples basta editar o JSX do `edit.js`, que é HTML com algumas chaves. React vira necessário só em blocos complexos com estado próprio. Para um aviso, um botão ou um destaque editável, o conhecimento básico de JavaScript já resolve a maior parte do trabalho no editor Gutenberg.</p>
</details>

<details>
<summary>Por que meu bloco não aparece na lista do Gutenberg?</summary>
<p>Na maioria dos casos, o bloco some da lista porque a pasta `build` não foi gerada. O `registerBlockType` no `index.js` só chega ao navegador depois do `npm run build`, então sem essa pasta o WordPress não tem o que carregar. Outras causas frequentes são o `apiVersion` 3 num WordPress abaixo de 6.3 e um `name` de bloco duplicado. Abrir o console do navegador costuma revelar o erro exato em segundos.</p>
</details>

<details>
<summary>Qual a diferença entre bloco estático e bloco dinâmico?</summary>
<p>A diferença está em onde o HTML é montado. No bloco estático, o `save.js` grava o HTML final no banco na hora de salvar; é rápido e bom para conteúdo fixo. No bloco dinâmico, o `render.php` monta o HTML a cada visita lendo os atributos em tempo real, ideal para dados que mudam. O dinâmico evita o block validation error quando você altera o template depois, porque nada fica congelado no banco de dados.</p>
</details>

<details>
<summary>Quanto tempo leva para publicar um plug in de bloco simples?</summary>
<p>Em ambientes de teste da FULL, um plug in de bloco simples vai do terminal ao bloco ativo em cerca de 25 a 35 minutos, com o Node.js já instalado. O scaffolding consome menos de 60 segundos, o `npm install` e o `npm run build` levam de 1 a 3 minutos, e o resto é editar o `edit.js` e validar no editor. Quem nunca usou linha de comando deve reservar uma hora na primeira vez para configurar o ambiente local com calma.</p>
</details>

<details>
<summary>O que é o block.json e por que ele é obrigatório?</summary>
<p>O `block.json` é o arquivo de metadados que descreve o bloco para o WordPress, com campos como `apiVersion`, `name`, `title` e `category`. Ele é o jeito canônico de registrar blocos desde o WordPress 5.8 e é lido pela função `register_block_type` no PHP. Sem ele, o WordPress não sabe que arquivos carregar nem como nomear o bloco. Ele centraliza a configuração num único lugar, o que torna o plug in de bloco mais simples de manter e versionar.</p>
</details>

---

## Próximos passos para dominar blocos no WordPress

Com o seu primeiro plug in de bloco rodando, o caminho natural é aprofundar em atributos, controles da sidebar e blocos dinâmicos que consultam o banco. Vale também entender como o PHP do WordPress monta páginas por trás, no nosso guia de [criar posts e páginas com PHP](https://full.services/crie-posts-e-paginas-do-wordpress-usando-php/), já que o `render.php` segue a mesma lógica. Para juntar tudo em uma trilha de aprendizado, o guia [domine o Elementor](https://full.services/guias/domine-o-elementor) reúne os materiais de criação visual e os de bloco nativo em um só lugar. O importante agora é repetir os cinco passos com um segundo bloco: a fluência vem da segunda vez, não da primeira.

<p class="wp-caption-text">Legenda: o plug in de bloco aparece na busca do editor assim que o npm run build é concluído e o plugin é ativado.</p>


---

## Metadados Estruturados (Schema.org)

```json-ld
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://full.services/plug-in-de-bloco/#article",
      "headline": "Plug in de bloco no Gutenberg: Crie o seu em 5 passos",
      "description": "Um plug in de bloco é um plugin WordPress que adiciona um bloco personalizado à lista do editor Gutenberg, com edição visual própria e renderização controlada por você.",
      "url": "https://full.services/plug-in-de-bloco/",
      "datePublished": "2026-06-27T09:00:00-03:00",
      "dateModified": "2026-06-27T09:00:00-03:00",
      "inLanguage": "pt-BR",
      "articleSection": "Elementor",
      "keywords": [
        "plug in de bloco",
        "WordPress",
        "Web Development"
      ],
      "author": {
        "@id": "https://full.services/#person-clayton"
      },
      "publisher": {
        "@id": "https://full.services/#org"
      },
      "about": [
        {
          "@type": "Thing",
          "name": "WordPress",
          "@id": "https://www.wikidata.org/wiki/Q13166",
          "sameAs": "https://www.wikidata.org/wiki/Q13166"
        },
        {
          "@type": "Thing",
          "name": "Web Development",
          "@id": "https://www.wikidata.org/wiki/Q386275",
          "sameAs": "https://www.wikidata.org/wiki/Q386275"
        }
      ],
      "mentions": [
        {
          "@type": "Organization",
          "name": "WordPress",
          "url": "https://wordpress.org/",
          "@id": "https://www.wikidata.org/wiki/Q13166",
          "sameAs": "https://www.wikidata.org/wiki/Q13166"
        }
      ],
      "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://full.services/plug-in-de-bloco/"
      },
      "wordCount": 2564,
      "citation": [
        {
          "@type": "CreativeWork",
          "name": "WordPress Developer Docs",
          "url": "https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/",
          "publisher": {
            "@type": "Organization",
            "name": "WordPress Developer Docs"
          }
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://full.services/plug-in-de-bloco/#faq",
      "isPartOf": {
        "@id": "https://full.services/plug-in-de-bloco/#article"
      },
      "mainEntity": [
        {
          "@type": "Question",
          "@id": "https://full.services/plug-in-de-bloco/#faq-q1",
          "name": "É possível criar um plug in de bloco sem saber React a fundo?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Sim, é possível começar sem domínio profundo de React. O scaffolding `@wordpress/create-block` entrega um bloco funcional pronto, e para um plug in de bloco simples basta editar o JSX do `edit.js`, que é HTML com algumas chaves. React vira necessário só em blocos complexos com estado próprio. Para um aviso, um botão ou um destaque editável, o conhecimento básico de JavaScript já resolve a maior parte do trabalho no editor Gutenberg.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/plug-in-de-bloco/#faq-q2",
          "name": "Por que meu bloco não aparece na lista do Gutenberg?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Na maioria dos casos, o bloco some da lista porque a pasta `build` não foi gerada. O `registerBlockType` no `index.js` só chega ao navegador depois do `npm run build`, então sem essa pasta o WordPress não tem o que carregar. Outras causas frequentes são o `apiVersion` 3 num WordPress abaixo de 6.3 e um `name` de bloco duplicado. Abrir o console do navegador costuma revelar o erro exato em segundos.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/plug-in-de-bloco/#faq-q3",
          "name": "Qual a diferença entre bloco estático e bloco dinâmico?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "A diferença está em onde o HTML é montado. No bloco estático, o `save.js` grava o HTML final no banco na hora de salvar; é rápido e bom para conteúdo fixo. No bloco dinâmico, o `render.php` monta o HTML a cada visita lendo os atributos em tempo real, ideal para dados que mudam. O dinâmico evita o block validation error quando você altera o template depois, porque nada fica congelado no banco de dados.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/plug-in-de-bloco/#faq-q4",
          "name": "Quanto tempo leva para publicar um plug in de bloco simples?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Em ambientes de teste da FULL, um plug in de bloco simples vai do terminal ao bloco ativo em cerca de 25 a 35 minutos, com o Node.js já instalado. O scaffolding consome menos de 60 segundos, o `npm install` e o `npm run build` levam de 1 a 3 minutos, e o resto é editar o `edit.js` e validar no editor. Quem nunca usou linha de comando deve reservar uma hora na primeira vez para configurar o ambiente local com calma.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/plug-in-de-bloco/#faq-q5",
          "name": "O que é o block.json e por que ele é obrigatório?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "O `block.json` é o arquivo de metadados que descreve o bloco para o WordPress, com campos como `apiVersion`, `name`, `title` e `category`. Ele é o jeito canônico de registrar blocos desde o WordPress 5.8 e é lido pela função `register_block_type` no PHP. Sem ele, o WordPress não sabe que arquivos carregar nem como nomear o bloco. Ele centraliza a configuração num único lugar, o que torna o plug in de bloco mais simples de manter e versionar.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        }
      ]
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://full.services/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Elementor",
          "item": "https://full.services/elementor/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Plug in de bloco no Gutenberg: Crie o seu em 5 passos",
          "item": "https://full.services/plug-in-de-bloco/"
        }
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://full.services/#org",
      "name": "FULL Services",
      "url": "https://full.services",
      "logo": {
        "@type": "ImageObject",
        "url": "https://full.services/wp-content/uploads/full-services-logo.png",
        "width": 200,
        "height": 60
      },
      "sameAs": [
        "https://www.instagram.com/fullservicesbr",
        "https://www.facebook.com/fullservices.br",
        "https://www.linkedin.com/company/fullservicesbr/"
      ],
      "knowsAbout": [
        "WordPress",
        "WordPress Hosting",
        "Web Development",
        "Performance Optimization",
        "WordPress Security",
        "SEO para WordPress"
      ],
      "award": [
        "Gold Medal - The WP Weekly Awards 2023 (https://thewpweekly.com/awards-2023/)",
        "Gold Medal - The WP Weekly Awards 2024 (https://thewpweekly.com/awards-2024/)"
      ],
      "hasCredential": {
        "@type": "EducationalOccupationalCredential",
        "credentialCategory": "certification",
        "name": "CVE Numbering Authority (CNA)",
        "description": "Autoridade de numeração de vulnerabilidades (CVE) para o ecossistema WordPress, autorizada a atribuir IDs CVE. Certificação válida desde 2022-05-03, com abrangência global.",
        "url": "https://www.cve.org/PartnerInformation/ListofPartners/partner/FULL",
        "recognizedBy": {
          "@type": "Organization",
          "name": "CISA — Cybersecurity and Infrastructure Security Agency",
          "url": "https://www.cisa.gov/",
          "sameAs": "https://www.cisa.gov/"
        }
      }
    },
    {
      "@type": "Person",
      "@id": "https://full.services/#person-clayton",
      "name": "Clayton Margiotti",
      "givenName": "Clayton",
      "familyName": "Margiotti",
      "jobTitle": "Fundador e CEO da FULL Services",
      "description": "Fundador e CEO da FULL Services, plataforma WordPress SaaS com 50 mil clientes e 150 mil sites conectados, e anchor do ecossistema Elevor Global. Em 2024 conduziu a FULL a se tornar a primeira e unica empresa brasileira aprovada como CVE Numbering Authority sob a CISA (DHS/EUA). Mais de 20 anos construindo empresas digitais, com 13+ reconhecimentos internacionais (Facebook, GPTW, ONU, RD Summit).",
      "url": "https://full.services/sobre-nos/",
      "image": "https://full.services/wp-content/uploads/2026/05/clayton-margiotti.jpg",
      "sameAs": [
        "https://www.linkedin.com/in/cmargiotti/"
      ],
      "knowsAbout": [
        "Artificial Intelligence",
        "Cybersecurity",
        "CVE Program",
        "WordPress Enterprise",
        "SaaS Platforms",
        "Digital Infrastructure",
        "Technology Entrepreneurship",
        "Company Building",
        "Business Leadership",
        "Digital Growth"
      ],
      "hasOccupation": {
        "@type": "Occupation",
        "name": "Fundador e CEO",
        "occupationalCategory": "11-1011.00"
      },
      "knowsLanguage": [
        {
          "@type": "Language",
          "name": "Portuguese",
          "alternateName": "pt-BR"
        },
        {
          "@type": "Language",
          "name": "English",
          "alternateName": "en"
        }
      ],
      "memberOf": {
        "@type": "Organization",
        "name": "CVE Numbering Authorities",
        "url": "https://www.cve.org/",
        "sameAs": "https://www.cve.org/"
      },
      "alumniOf": [
        {
          "@type": "EducationalOrganization",
          "name": "Global Scaling Academy (Blitzscaling Program)",
          "url": "https://www.blitzscalingacademy.com"
        },
        {
          "@type": "EducationalOrganization",
          "name": "Esade",
          "url": "https://www.esade.edu"
        },
        {
          "@type": "EducationalOrganization",
          "name": "Business School Sao Paulo (BSP)",
          "url": "https://bsp.edu.br/"
        },
        {
          "@type": "EducationalOrganization",
          "name": "Tera",
          "url": "https://somostera.com"
        },
        {
          "@type": "EducationalOrganization",
          "name": "Le Wagon",
          "url": "https://www.lewagon.com"
        },
        {
          "@type": "EducationalOrganization",
          "name": "FIAP",
          "url": "https://www.fiap.com.br"
        },
        {
          "@type": "EducationalOrganization",
          "name": "PUCRS",
          "url": "https://online.pucrs.br/"
        }
      ],
      "award": [
        "Digital Disruptor – Engaging Experiences Master (Globant, 2021)",
        "Maior ROI do e-commerce brasileiro – Letrissimas (Facebook, 2019)",
        "1º lugar – Melhores Empresas para Trabalhar no Brasil – Eleva Digital (Great Place to Work, 2018)",
        "Case global de educacao no Facebook – Metodo SUPERA (Facebook, 2017)",
        "Maquina de Geracao de Leads, Agencia do Ano (RD Summit / RD Station, 2015)",
        "Monthly Recurring Revenue, top performance (RD Summit / RD Station, 2015)",
        "Quality/Efficiency – Entrepreneurship Training (UNCTAD / PNUD-ONU, 2010)"
      ],
      "subjectOf": [
        {
          "@type": "NewsArticle",
          "url": "https://www.globant.com/news/globant-reveals-inaugural-digital-disruptors-award-winners",
          "publisher": {
            "@type": "Organization",
            "name": "Globant"
          }
        },
        {
          "@type": "NewsArticle",
          "url": "https://www.prnewswire.com/news-releases/letrissimas-com-e-destaque-do-e-commerce-brasileiro-com-maior-roi-de-2018-877517801.html",
          "publisher": {
            "@type": "Organization",
            "name": "PR Newswire"
          }
        },
        {
          "@type": "NewsArticle",
          "url": "https://www.segs.com.br/seguros/102599-gestao-de-pessoas-garante-mais-lucro-as-empresas",
          "publisher": {
            "@type": "Organization",
            "name": "Segs"
          }
        },
        {
          "@type": "NewsArticle",
          "url": "https://franquiaeducacional.com/negocios-inovadores-facebook-elege-supera-case-mundial-de-educacao",
          "publisher": {
            "@type": "Organization",
            "name": "Franquia Educacional"
          }
        },
        {
          "@type": "NewsArticle",
          "url": "https://acontecendoaqui.com.br/marketing/resultados-digitais-divulga-vencedores-do-premio-agencias-de-resultados-2015-durante-o-rd",
          "publisher": {
            "@type": "Organization",
            "name": "Acontecendo Aqui"
          }
        }
      ],
      "worksFor": {
        "@type": "Organization",
        "@id": "https://full.services/#org"
      }
    },
    {
      "@type": "HowTo",
      "@id": "https://full.services/plug-in-de-bloco/#howto",
      "isPartOf": {
        "@id": "https://full.services/plug-in-de-bloco/#article"
      },
      "name": "Passo a passo: plug in de bloco",
      "description": "Guia passo a passo sobre plug in de bloco para WordPress.",
      "url": "https://full.services/plug-in-de-bloco/",
      "totalTime": "PT30M",
      "author": {
        "@type": "Organization",
        "@id": "https://full.services/#org"
      },
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Passo 1: Gere o esqueleto com create-block",
          "text": "Rode `npx @wordpress/create-block@latest meu-bloco` na pasta de plugins do WordPress. O comando baixa o pacote oficial e cria uma pasta completa com `block.json`, `src/index.js`, `src/edit.js`, `src/save.js` e o `package.json` de build. Para um bloco dinâmico renderizado no servidor, adicione `--variant=dynamic`, que gera também o `render.php`. Em segundos você tem um plug in de bloco já funcional, antes de tocar em qualquer código."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Passo 2: Configure o block.json",
          "text": "Abra o `block.json` e revise os campos `apiVersion`, `name`, `title` e `category`. O `apiVersion` deve ser `3` em WordPress 6.3 ou superior; o `name` segue o padrão `namespace/bloco` e precisa ser único no site. O `title` é o nome que aparece na busca do editor. Esse arquivo é a fonte única de verdade do bloco desde o WordPress 5.8, lido pela função `register_block_type` no PHP."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Passo 3: Defina a edição no edit.js",
          "text": "No `src/edit.js`, a função `Edit()` retorna o JSX que o usuário vê e manipula dentro do editor. É aqui que você adiciona campos de texto, controles de cor e a barra lateral de configurações com os componentes de `@wordpress/components`. Para um primeiro plug in de bloco, mantenha simples: um parágrafo editável com `RichText` já demonstra o ciclo completo. O `useBlockProps()` conecta seu markup ao sistema de estilos do bloco."
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Passo 4: Compile com npm run build",
          "text": "Entre na pasta do bloco e rode `npm install` seguido de `npm run build`. O `build` compila o `src` para a pasta `build`, que é o que o WordPress de fato carrega. Durante o desenvolvimento, use `npm run start` para recompilar a cada salvamento. Sem a pasta `build` gerada, o `registerBlockType` no `index.js` não chega ao navegador e o bloco simplesmente não aparece na lista do Gutenberg."
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Passo 5: Ative e valide no editor",
          "text": "Vá em Plugins no painel do WordPress, ative o seu plug in de bloco e abra um post novo. Clique no "+" do editor, busque pelo `title` que você definiu e insira o bloco. Edite o conteúdo, salve e visualize no front-end para confirmar a renderização. Se o bloco aparece no editor mas sai vazio na página, o problema costuma estar no `save.js` ou no atributo `render` do `block.json` apontando para o arquivo errado. --- A escolha entre bloco estático e dinâmico define como o conteúdo é salvo e onde ele é montado, e muda 100% da manutenção futura. No bloco estático, o `save.js` grava o HTML final direto no banco de dados, o que é rápido e ideal para conteúdo fixo como um aviso ou um botão simples. No dinâmico, o `render.php` monta o HTML a cada visita, lendo `$attributes` em tempo real, o que serve a dados que mudam, como uma lista de posts recentes. A diferença prática aparece na hora de evoluir o bloco. Um bloco estático que você altere depois pode gerar o temido "block validation error", porque o HTML salvo não bate mais com o `save()` novo. O bloco dinâmico não tem esse risco: como o `render.php` gera tudo na hora, mudar o template não invalida o conteúdo antigo. Para quem vai manter"
        }
      ]
    }
  ]
}
```
