---
title: "Portais com JetEngine e Elementor: Guia técnico em 6 etapas"
description: "Um portal é um site orientado a dados, onde o conteúdo vive em estruturas próprias e não em posts comuns. Construir portais com JetEngine e Elementor."
url: https://full.services/portais-com-jetengine-elementor/
date: 2026-06-27
author: "Clayton Margiotti"
---

# Portais com JetEngine e Elementor: Guia técnico em 6 etapas

**Portais com JetEngine e Elementor** nascem de três peças: Custom Post Types, meta fields e o Query Builder ligados a Listing Grids dinâmicos. Segundo a [W3Techs](https://w3techs.com/technologies/details/cm-elementor) (2026), o Elementor roda em 31,2% dos sites WordPress ativos. O JetEngine adiciona a camada de dados que o builder sozinho não tem. Aqui você monta o portal sem escrever PHP.

Um portal é um site orientado a dados, onde o conteúdo vive em estruturas próprias e não em posts comuns. Construir portais com JetEngine e Elementor significa modelar esses dados como Custom Post Types, descrever cada registro com meta fields e exibir tudo em grades dinâmicas montadas no editor visual. A diferença para uma página estática do [Elementor](https://full.services/glossario/elementor/) é o vínculo: o layout se repete automaticamente para cada item cadastrado. Este tutorial cobre as 6 etapas essenciais, do Post Type ao filtro, com a documentação oficial da Crocoblock como referência técnica. Quem domina o conjunto entrega diretórios, áreas de membros e listagens sem depender de tema customizado.

---

## Diagnóstico rápido: As peças de um portal dinâmico

Um portal completo no WordPress combina quatro componentes do JetEngine, e cada um resolve um problema distinto. O Post Type guarda os registros; os meta fields descrevem cada um; o Query Builder filtra e ordena; e o Listing Grid renderiza no Elementor. Sem essa divisão, o projeto vira páginas soltas em vez de um sistema que escala para milhares de itens.

<table id="pecas-portal-jetengine-elementor">
<caption>Portais com JetEngine e Elementor: componentes e função</caption>
<thead>
<tr>
<th scope="col">Componente</th>
<th scope="col">Função no portal</th>
<th scope="col">Onde configurar</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Custom Post Type</th>
<td>Estrutura que armazena cada registro (imóvel, profissional, vaga).</td>
<td>JetEngine, menu Post Types.</td>
</tr>
<tr>
<th scope="row">Meta fields</th>
<td>Campos próprios de cada item (preço, telefone, categoria).</td>
<td>Meta Box vinculado ao Post Type.</td>
</tr>
<tr>
<th scope="row">Query Builder</th>
<td>Consulta que filtra e ordena os registros exibidos.</td>
<td>JetEngine, menu Query Builder.</td>
</tr>
<tr>
<th scope="row">Listing Grid</th>
<td>Grade visual que repete o template por item no Elementor.</td>
<td>Widget Listing Grid no editor.</td>
</tr>
</tbody>
</table>

A separação entre dados e apresentação torna o portal sustentável: você ajusta o design uma vez no Listing Item e todos os registros herdam a mudança.

---

## Passo a passo: Como criar portais com JetEngine e Elementor

Montar o portal segue uma ordem que respeita a dependência entre as peças: primeiro a estrutura de dados, depois a consulta e por último o layout. Pular etapas é a causa número 1 de Listing Grids que aparecem vazios, segundo a base de troubleshooting da [Crocoblock KB](https://crocoblock.com/knowledge-base/). As seis etapas abaixo seguem essa sequência e usam apenas a interface, sem código.

### Passo 1: Crie o custom post type no JetEngine

Acesse o menu JetEngine e abra Post Types para registrar a estrutura que vai guardar os registros do portal. Um [Custom Post Type](https://full.services/glossario/custom-post-type/) separa os dados do portal dos posts comuns do blog, o que evita poluir o feed e mantém a taxonomia limpa. Defina nome, slug e ícone, e habilite o suporte a thumbnail se os itens tiverem imagem. Para um diretório de imóveis, o Post Type seria "Imóveis"; para vagas, "Vagas". O JetEngine cria o menu próprio no admin e a tela de cadastro automaticamente, sem tocar no functions.php do tema. Esse é o alicerce: tudo que vem depois aponta para esse Post Type.

### Passo 2: Adicione os meta fields de cada registro

No mesmo painel do Post Type, abra a seção Meta Fields para descrever cada registro com os atributos que o portal precisa exibir. Um imóvel pede preço, área, quartos e endereço; um profissional pede telefone, especialidade e cidade. O JetEngine oferece tipos como texto, número, seleção, data, mídia e checkbox. Defina o name de cada field em minúsculas e sem espaço, porque esse identificador é o que o Listing Grid vai puxar via Dynamic Field. Campos numéricos bem tipados permitem ordenação correta depois: preço como número ordena de forma crescente real, e não alfabética. Esse cuidado evita retrabalho quando o portal cresce.

### Passo 3: Crie taxonomias para filtrar o conteúdo

Registre uma ou mais taxonomias no JetEngine para agrupar os registros por categoria, e o portal ganha navegação por filtros. Uma [taxonomia](https://full.services/glossario/taxonomia-wordpress/) personalizada funciona como as categorias do blog, mas vinculada ao seu Post Type: bairros para imóveis, áreas para profissionais, setores para vagas. O JetEngine permite taxonomia hierárquica (como categorias, com pai e filho) ou plana (como tags). Associe a taxonomia ao Post Type criado no Passo 1 marcando o vínculo na tela de registro. Com a taxonomia pronta, o JetSmartFilters consegue gerar dropdowns e checkboxes que filtram a grade ao vivo, sem recarregar a página. É a base da experiência de busca de qualquer diretório.

### Passo 4: Monte a consulta no query builder

Abra o Query Builder do JetEngine e crie uma Posts Query apontando para o Post Type do portal, definindo ordem e filtros padrão. O [controle de query](https://full.services/elementor-query-control/) determina o que aparece antes de qualquer filtro do usuário: só itens publicados, ordenados por data ou por um meta field numérico. Aqui você define posts por página (12 a 24 costuma equilibrar performance e densidade), critério de ordenação e meta queries para esconder registros sem preço, por exemplo. A WP_Query por trás é a mesma do core do WordPress, descrita na [referência oficial da WordPress Developer Docs](https://developer.wordpress.org/reference/classes/wp_query/), então o comportamento é previsível. Uma query bem montada no Passo 4 economiza filtros redundantes no front-end.

### Passo 5: Crie o listing item e exiba com o listing grid

Crie um Listing dentro do JetEngine escolhendo o Post Type como fonte, e o JetEngine abre um template no Elementor para desenhar o card de um único item. Você arrasta widgets Dynamic Field e Dynamic Image, aponta cada um para o meta field correspondente e estiliza o card uma vez. Depois, em qualquer página do [Elementor](https://full.services/glossario/elementor/), o widget Listing Grid recebe esse Listing e a Query do Passo 4, repetindo o card para cada registro. Defina colunas (3 ou 4 no desktop, 1 no mobile) e o espaçamento. O resultado é uma grade que se atualiza sozinha: cadastrou um item novo, ele aparece na grade sem editar a página.

### Passo 6: Conecte filtros dinâmicos com o JetSmartFilters

Adicione widgets do JetSmartFilters acima ou ao lado do Listing Grid e aponte cada filtro para a mesma Query do Passo 4. Um filtro de Select para taxonomia, um de Range para preço e um de Search por texto cobrem 90% dos diretórios. O JetSmartFilters envia a requisição via AJAX e atualiza só a grade, mantendo o resto da página intacto, o que segura o tempo de resposta abaixo de 1 segundo na maioria dos cadastros médios. Marque o Listing Grid como provedor do filtro no campo "This filter for". Sem esse vínculo, o filtro renderiza mas não afeta a grade, erro comum de quem pula a conexão. Com os seis passos prontos, o portal está navegável de ponta a ponta.

---

## Relacionamentos: Quando um portal precisa conectar entidades

Relacionamentos no JetEngine ligam dois Post Types diferentes, e portais reais quase sempre precisam disso. Um imóvel tem um corretor; uma vaga tem uma empresa; um curso tem um instrutor. Sem relacionamento, você duplica dados (digita o nome do corretor em cada imóvel) e perde integridade. O JetEngine resolve com relations nativas de um-para-muitos e muitos-para-muitos.

O recurso vive no menu Relations do JetEngine, onde você define o Post Type de origem, o de destino e a cardinalidade. Um corretor liga-se a vários imóveis numa relação one-to-many; já uma vaga com vários candidatos e um candidato em várias vagas é many-to-many. Depois de criada a relação, o Listing Grid puxa os dados do item relacionado via Dynamic Field, exibindo o telefone do corretor dentro do card do imóvel. O passo a passo está no nosso guia de [relacionamentos entre posts no Elementor](https://full.services/jetengine-como-criar-relacionamentos-entre-posts-no-elementor/).

---

## Query builder x listing grid: A confusão que trava o portal

Query Builder e Listing Grid resolvem coisas diferentes, e trocar um pelo outro é o erro técnico que mais aparece. O Query Builder é a consulta (o que buscar no banco); o Listing Grid é a renderização (como exibir o resultado). Um Listing Grid sem Query usa a query padrão da página, o que funciona num Single, mas falha numa landing page arbitrária.

A regra prática separa os dois papéis. Use a [WP_Query](https://full.services/glossario/wp-query/) via Query Builder sempre que precisar de controle: filtrar por meta field, ordenar por preço ou limitar a uma taxonomia. Deixe o Listing Grid herdar a query da página apenas em templates Single, onde o contexto já está definido. No widget Listing Grid, o campo "Use Custom Query" precisa estar ativo e apontando para a query nomeada no Passo 4. Errar esse vínculo gera grades que ignoram seus filtros ou mostram todos os posts. A documentação da [Crocoblock KB](https://crocoblock.com/knowledge-base/) trata essa ligação como pré-requisito de qualquer listagem confiável.

---

## Performance: O que pesa em um portal com muitos registros

Portais com milhares de registros exigem cuidado com a query, porque cada Listing Grid roda uma consulta ao banco a cada carregamento. Em VPS com menos de 2 GB de RAM e um diretório acima de 3.000 itens, queries sem limite de posts por página tendem a gerar picos acima de 2 segundos no primeiro acesso, antes do cache. O gargalo raramente é o Elementor; é a consulta mal limitada.

A configuração recomendada limita o Listing Grid a 12 ou 16 itens por página e ativa paginação AJAX, em vez de carregar tudo de uma vez. Meta queries pesadas (ordenar por meta field não indexado) custam caro: indexe os campos de ordenação mais usados ou cacheie a página. A gente vê no suporte da FULL que a maioria dos portais lentos resolve a lentidão só com paginação correta e cache, antes de pensar em servidor maior. Listagens dinâmicas também pedem SEO; quem quer indexação saudável pode revisar nosso guia de [SEO de listings dinâmicos](https://full.services/como-otimizar-seo-de-listings-dinamicos-no-wordpress/).

---

## Casos de uso: O que dá para construir com esse conjunto

O conjunto JetEngine mais Elementor cobre praticamente todo portal orientado a dados, e três formatos concentram a demanda. Diretórios (imóveis, profissionais, negócios locais) usam CPT mais taxonomia mais filtros. Áreas de membros restringem conteúdo por usuário logado. Plataformas de listagem (vagas, classificados, eventos) combinam tudo com formulários de envio pelo front-end via JetFormBuilder.

Cada caso reaproveita as mesmas seis etapas, mudando só o modelo de dados. Para um diretório, o passo a passo é exatamente o deste tutorial. Para áreas de membros, o JetEngine entra com visibilidade dinâmica e o conteúdo aparece conforme o papel do usuário, como mostramos em [áreas de membros no WordPress](https://full.services/como-usar-jetengine-para-criar-areas-de-membros-no-wordpress/). Para quem prefere campos via ACF em vez do meta engine nativo, a combinação também funciona, descrita em [criar Custom Post Types com JetEngine e ACF PRO](https://full.services/criar-custom-post-types-com-jetengine-e-acf-pro/). O denominador comum é sempre dados estruturados exibidos por um template repetível.

<aside aria-label="Metodologia dos Testes">
## Metodologia dos testes
<p>As configurações descritas foram verificadas entre <time datetime="2026-04">abril</time> e <time datetime="2026-06">junho de 2026</time> em ambientes WordPress 6.5, PHP 8.2, com JetEngine 3.x e Elementor PRO 3.x sobre tema Hello. Os caminhos de menu (Post Types, Meta Fields, Query Builder, Relations, Listings) e os nomes de widget seguem a documentação oficial da Crocoblock e a referência da WP_Query nas WordPress Developer Docs. Os números de performance refletem a observação qualitativa do suporte da FULL em portais de porte médio, sem dataset publicado: usamos faixas técnicas, não proporções fechadas. Cada etapa foi reproduzida em instalação limpa para confirmar que a sequência funciona sem código.</p>
</aside>

---

## Acelere seu portal com o bundle FULL

Montar portais com JetEngine e Elementor exige as licenças PRO dos dois ecossistemas, e é aí que o custo avulso assusta. No plano [PRO da FULL (R$849)](https://full.services/planos), o Crocoblock e o Elementor PRO entram junto com outros 15 plugins premium ativados em 1 clique. Diluído nos sites que você gerencia, o bundle sai por cerca de R$85/site, contra a soma das assinaturas individuais de cada plugin. A gente vê no suporte da FULL que agências que montam diretórios em série economizam mais no bundle do que no plano avulso, porque reaproveitam as mesmas licenças em cada projeto novo. É o caminho de quem trata portal como produto recorrente, não como entrega única.

---

## Perguntas frequentes sobre portais com JetEngine e Elementor

<details>
<summary>É possível criar um portal com JetEngine sem escrever nenhum código PHP?</summary>
<p>Sim. Todo o fluxo (Custom Post Type, meta fields, taxonomias, Query Builder, Listing Grid e filtros) é montado pela interface do JetEngine e do Elementor, sem tocar no functions.php. O JetEngine gera a estrutura de dados e o Listing Item renderiza o template visualmente. Código só vira necessário em customizações avançadas, como hooks ou cálculos dinâmicos fora do escopo nativo do plugin.</p>
</details>

<details>
<summary>Por que meu Listing Grid aparece vazio mesmo com registros cadastrados?</summary>
<p>O Listing Grid vazio quase sempre vem de três causas: a Query do Query Builder aponta para o Post Type errado, o campo "Use Custom Query" não está ativo, ou os itens estão como rascunho em vez de publicados. Verifique se a query filtra por status "publish" e se o widget referência a query nomeada. Um meta query restritivo demais também esconde todos os registros sem querer.</p>
</details>

<details>
<summary>Qual a diferença entre usar JetEngine e usar ACF para os campos do portal?</summary>
<p>O JetEngine traz meta fields nativos integrados ao Query Builder e ao Listing Grid, sem ponte extra. O ACF PRO oferece campos mais sofisticados (repeater, flexible content) e é familiar a quem já usa Custom Fields. Os dois funcionam juntos: dá para registrar o Post Type no JetEngine e os campos no ACF. Para portais simples, o meta engine nativo do JetEngine resolve sem plugin adicional.</p>
</details>

<details>
<summary>O Elementor sozinho consegue montar um portal dinâmico de diretório?</summary>
<p>Não de forma completa. O Elementor PRO tem Loop Grid e Dynamic Tags, que exibem dados, mas não cria Custom Post Types, relacionamentos entre entidades nem um Query Builder visual solido. Para um portal de verdade, com tipos de conteúdo próprios e filtros AJAX por taxonomia, o JetEngine fornece a camada de dados que falta. O Elementor entra como a camada de apresentação dessa estrutura.</p>
</details>

<details>
<summary>Quantos registros um portal com JetEngine e Elementor suporta sem ficar lento?</summary>
<p>Não há limite fixo: o que pesa é a query, não a quantidade total. Portais com milhares de itens rodam bem se o Listing Grid limitar a 12 a 24 posts por página e usar paginação AJAX. O risco surge em consultas que carregam todos os registros de uma vez ou ordenam por meta fields não indexados. Cache de página e índices nos campos de ordenação resolvem a maioria dos casos de lentidão.</p>
</details>

---

## Próximos passos para colocar o portal no ar

Construir portais com JetEngine e Elementor é menos sobre código e mais sobre modelar dados na ordem certa: estrutura, consulta, apresentação e filtro. Com as seis etapas deste tutorial, você sai de posts soltos para um sistema que escala e se mantém sozinho a cada novo cadastro. O passo seguinte é decidir o modelo de dados do seu caso (diretório, área de membros ou listagem) e replicar a sequência. Para aprofundar cada widget e técnica do builder, o [guia Domine o Elementor](https://full.services/guias/domine-o-elementor) reúne os tutoriais em trilha, e a categoria de [artigos de Elementor da FULL](https://full.services/elementor/) traz os complementos. Vale também avaliar se o [Crocoblock compensa](https://full.services/crocoblock-vale-a-pena/) para o seu volume de projetos antes de fechar o stack. Para continuar aprendendo WordPress, o FULL Academy reúne tutoriais, guias e reviews em um só lugar.

<p class="wp-caption-text">Legenda: o Post Type é o alicerce do portal, criado sem código no menu do JetEngine.</p>


---

## Metadados Estruturados (Schema.org)

```json-ld
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://full.services/portais-com-jetengine-elementor/#article",
      "headline": "Portais com JetEngine e Elementor: Guia técnico em 6 etapas",
      "description": "Um portal é um site orientado a dados, onde o conteúdo vive em estruturas próprias e não em posts comuns.",
      "url": "https://full.services/portais-com-jetengine-elementor/",
      "datePublished": "2026-06-27T09:00:00-03:00",
      "dateModified": "2026-06-27T09:00:00-03:00",
      "inLanguage": "pt-BR",
      "articleSection": "Elementor",
      "keywords": [
        "portais com jetengine e elementor",
        "Elementor",
        "WordPress Page Builders",
        "Web Design"
      ],
      "author": {
        "@id": "https://full.services/#person-clayton"
      },
      "publisher": {
        "@id": "https://full.services/#org"
      },
      "about": [
        {
          "@type": "Thing",
          "name": "Elementor",
          "@id": "https://www.wikidata.org/wiki/Q96322879",
          "sameAs": "https://www.wikidata.org/wiki/Q96322879"
        },
        {
          "@type": "Thing",
          "name": "WordPress Page Builders"
        },
        {
          "@type": "Thing",
          "name": "Web Design"
        }
      ],
      "mentions": [
        {
          "@type": "Organization",
          "name": "Elementor",
          "url": "https://elementor.com/",
          "@id": "https://www.wikidata.org/wiki/Q96322879",
          "sameAs": "https://www.wikidata.org/wiki/Q96322879"
        },
        {
          "@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/portais-com-jetengine-elementor/"
      },
      "wordCount": 2700,
      "citation": [
        {
          "@type": "CreativeWork",
          "name": "W3Techs",
          "url": "https://w3techs.com/technologies/details/cm-elementor",
          "publisher": {
            "@type": "Organization",
            "name": "W3Techs"
          }
        },
        {
          "@type": "CreativeWork",
          "name": "Crocoblock KB",
          "url": "https://crocoblock.com/knowledge-base/",
          "publisher": {
            "@type": "Organization",
            "name": "Crocoblock KB"
          }
        },
        {
          "@type": "CreativeWork",
          "name": "WordPress Developer Docs",
          "url": "https://developer.wordpress.org/reference/classes/wp_query/",
          "publisher": {
            "@type": "Organization",
            "name": "WordPress Developer Docs"
          }
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://full.services/portais-com-jetengine-elementor/#faq",
      "isPartOf": {
        "@id": "https://full.services/portais-com-jetengine-elementor/#article"
      },
      "mainEntity": [
        {
          "@type": "Question",
          "@id": "https://full.services/portais-com-jetengine-elementor/#faq-q1",
          "name": "É possível criar um portal com JetEngine sem escrever nenhum código PHP?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Sim. Todo o fluxo (Custom Post Type, meta fields, taxonomias, Query Builder, Listing Grid e filtros) é montado pela interface do JetEngine e do Elementor, sem tocar no functions.php. O JetEngine gera a estrutura de dados e o Listing Item renderiza o template visualmente. Código só vira necessário em customizações avançadas, como hooks ou cálculos dinâmicos fora do escopo nativo do plugin.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/portais-com-jetengine-elementor/#faq-q2",
          "name": "Por que meu Listing Grid aparece vazio mesmo com registros cadastrados?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "O Listing Grid vazio quase sempre vem de três causas: a Query do Query Builder aponta para o Post Type errado, o campo "Use Custom Query" não está ativo, ou os itens estão como rascunho em vez de publicados. Verifique se a query filtra por status "publish" e se o widget referência a query nomeada. Um meta query restritivo demais também esconde todos os registros sem querer.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/portais-com-jetengine-elementor/#faq-q3",
          "name": "Qual a diferença entre usar JetEngine e usar ACF para os campos do portal?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "O JetEngine traz meta fields nativos integrados ao Query Builder e ao Listing Grid, sem ponte extra. O ACF PRO oferece campos mais sofisticados (repeater, flexible content) e é familiar a quem já usa Custom Fields. Os dois funcionam juntos: dá para registrar o Post Type no JetEngine e os campos no ACF. Para portais simples, o meta engine nativo do JetEngine resolve sem plugin adicional.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/portais-com-jetengine-elementor/#faq-q4",
          "name": "O Elementor sozinho consegue montar um portal dinâmico de diretório?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Não de forma completa. O Elementor PRO tem Loop Grid e Dynamic Tags, que exibem dados, mas não cria Custom Post Types, relacionamentos entre entidades nem um Query Builder visual solido. Para um portal de verdade, com tipos de conteúdo próprios e filtros AJAX por taxonomia, o JetEngine fornece a camada de dados que falta. O Elementor entra como a camada de apresentação dessa estrutura.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/portais-com-jetengine-elementor/#faq-q5",
          "name": "Quantos registros um portal com JetEngine e Elementor suporta sem ficar lento?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Não há limite fixo: o que pesa é a query, não a quantidade total. Portais com milhares de itens rodam bem se o Listing Grid limitar a 12 a 24 posts por página e usar paginação AJAX. O risco surge em consultas que carregam todos os registros de uma vez ou ordenam por meta fields não indexados. Cache de página e índices nos campos de ordenação resolvem a maioria dos casos de lentidão.",
            "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": "Portais com JetEngine e Elementor: Guia técnico em 6 etapas",
          "item": "https://full.services/portais-com-jetengine-elementor/"
        }
      ]
    },
    {
      "@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/portais-com-jetengine-elementor/#howto",
      "isPartOf": {
        "@id": "https://full.services/portais-com-jetengine-elementor/#article"
      },
      "name": "Passo a passo: portais com jetengine e elementor",
      "description": "Guia passo a passo sobre portais com jetengine e elementor para WordPress.",
      "url": "https://full.services/portais-com-jetengine-elementor/",
      "totalTime": "PT36M",
      "author": {
        "@type": "Organization",
        "@id": "https://full.services/#org"
      },
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Passo 1: Crie o custom post type no JetEngine",
          "text": "Acesse o menu JetEngine e abra Post Types para registrar a estrutura que vai guardar os registros do portal. Um <a href="https://full.services/glossario/custom-post-type/">Custom Post Type</a> separa os dados do portal dos posts comuns do blog, o que evita poluir o feed e mantém a taxonomia limpa. Defina nome, slug e ícone, e habilite o suporte a thumbnail se os itens tiverem imagem. Para um diretório de imóveis, o Post Type seria "Imóveis"; para vagas, "Vagas". O JetEngine cria o menu próprio no admin e a tela de cadastro automaticamente, sem tocar no functions.php do tema. Esse é o alicerce: tudo que vem depois aponta para esse Post Type."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Passo 2: Adicione os meta fields de cada registro",
          "text": "No mesmo painel do Post Type, abra a seção Meta Fields para descrever cada registro com os atributos que o portal precisa exibir. Um imóvel pede preço, área, quartos e endereço; um profissional pede telefone, especialidade e cidade. O JetEngine oferece tipos como texto, número, seleção, data, mídia e checkbox. Defina o name de cada field em minúsculas e sem espaço, porque esse identificador é o que o Listing Grid vai puxar via Dynamic Field. Campos numéricos bem tipados permitem ordenação correta depois: preço como número ordena de forma crescente real, e não alfabética. Esse cuidado evita retrabalho quando o portal cresce."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Passo 3: Crie taxonomias para filtrar o conteúdo",
          "text": "Registre uma ou mais taxonomias no JetEngine para agrupar os registros por categoria, e o portal ganha navegação por filtros. Uma <a href="https://full.services/glossario/taxonomia-wordpress/">taxonomia</a> personalizada funciona como as categorias do blog, mas vinculada ao seu Post Type: bairros para imóveis, áreas para profissionais, setores para vagas. O JetEngine permite taxonomia hierárquica (como categorias, com pai e filho) ou plana (como tags). Associe a taxonomia ao Post Type criado no Passo 1 marcando o vínculo na tela de registro. Com a taxonomia pronta, o JetSmartFilters consegue gerar dropdowns e checkboxes que filtram a grade ao vivo, sem recarregar a página. É a base da experiência de busca de qualquer diretório."
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Passo 4: Monte a consulta no query builder",
          "text": "Abra o Query Builder do JetEngine e crie uma Posts Query apontando para o Post Type do portal, definindo ordem e filtros padrão. O <a href="https://full.services/elementor-query-control/">controle de query</a> determina o que aparece antes de qualquer filtro do usuário: só itens publicados, ordenados por data ou por um meta field numérico. Aqui você define posts por página (12 a 24 costuma equilibrar performance e densidade), critério de ordenação e meta queries para esconder registros sem preço, por exemplo. A WP_Query por trás é a mesma do core do WordPress, descrita na <a href="https://developer.wordpress.org/reference/classes/wp_query/">referência oficial da WordPress Developer Docs</a>, então o comportamento é previsível. Uma query bem montada no Passo 4 economiza filtros redundantes no front-end."
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Passo 5: Crie o listing item e exiba com o listing grid",
          "text": "Crie um Listing dentro do JetEngine escolhendo o Post Type como fonte, e o JetEngine abre um template no Elementor para desenhar o card de um único item. Você arrasta widgets Dynamic Field e Dynamic Image, aponta cada um para o meta field correspondente e estiliza o card uma vez. Depois, em qualquer página do <a href="https://full.services/glossario/elementor/">Elementor</a>, o widget Listing Grid recebe esse Listing e a Query do Passo 4, repetindo o card para cada registro. Defina colunas (3 ou 4 no desktop, 1 no mobile) e o espaçamento. O resultado é uma grade que se atualiza sozinha: cadastrou um item novo, ele aparece na grade sem editar a página."
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Passo 6: Conecte filtros dinâmicos com o JetSmartFilters",
          "text": "Adicione widgets do JetSmartFilters acima ou ao lado do Listing Grid e aponte cada filtro para a mesma Query do Passo 4. Um filtro de Select para taxonomia, um de Range para preço e um de Search por texto cobrem 90% dos diretórios. O JetSmartFilters envia a requisição via AJAX e atualiza só a grade, mantendo o resto da página intacto, o que segura o tempo de resposta abaixo de 1 segundo na maioria dos cadastros médios. Marque o Listing Grid como provedor do filtro no campo "This filter for". Sem esse vínculo, o filtro renderiza mas não afeta a grade, erro comum de quem pula a conexão. Com os seis passos prontos, o portal está navegável de ponta a ponta. --- Relacionamentos no JetEngine ligam dois Post Types diferentes, e portais reais quase sempre precisam disso. Um imóvel tem um corretor; uma vaga tem uma empresa; um curso tem um instrutor. Sem relacionamento, você duplica dados (digita o nome do corretor em cada imóvel) e perde integridade. O JetEngine resolve com relations nativas de um-para-muitos e muitos-para-muitos. O recurso vive no menu Relations do JetEngine, onde você define o Post Type de origem, o de destino e a cardinalidade. Um corretor liga-se a vários imóveis numa"
        }
      ]
    }
  ]
}
```
