176 lines
5.1 KiB
Markdown
176 lines
5.1 KiB
Markdown
---
|
|
name: jetengine
|
|
description: Desenvolvimento com JetEngine (Crocoblock). Cobre CPT, CCT, Meta Boxes, Taxonomias, Relations, Query Builder, Listing Grid/Map, Dynamic Content, Dynamic Tags, Macros, Profile Builder, REST API e automação headless.
|
|
layer: wiki
|
|
---
|
|
|
|
# /jetengine — JetEngine Development
|
|
|
|
JetEngine é o núcleo do ecossistema Crocoblock: cria CPT, CCT, Meta Boxes, Relations, Queries e Listings com conteúdo dinâmico para Elementor.
|
|
|
|
## CPT vs CCT — Escolha Crítica
|
|
|
|
| | Custom Post Type (CPT) | Custom Content Type (CCT) |
|
|
|--|----------------------|--------------------------|
|
|
| **Storage** | `wp_posts` + `wp_postmeta` | Tabela SQL própria `wp_jet_cct_{slug}` |
|
|
| **Performance** | Lenta em queries complexas | Muito rápida (colunas reais) |
|
|
| **Compatibilidade** | Total WP ecosystem | Limitada (sem taxonomies nativas) |
|
|
| **REST API** | `/wp-json/wp/v2/{slug}` | `/wp-json/jet-cct/{slug}` |
|
|
| **Automação** | `wp_insert_post()` | `CCT_Data_Handler` ou SQL directo |
|
|
| **Usar quando** | Conteúdo editorial, SEO, plugins WP | Alta performance, CRUD automatizado, dashboards |
|
|
|
|
**Regra prática:** CPT para conteúdo público/SEO; CCT para dados internos, integrações e alta escala.
|
|
|
|
## Criar CPT
|
|
|
|
```
|
|
JetEngine > Post Types > Add New
|
|
├── Slug (único, sem espaços, lowercase)
|
|
├── Labels (Singular / Plural)
|
|
├── Suporte: title, editor, thumbnail, excerpt, custom-fields
|
|
├── REST API: Activar para integração externa
|
|
├── Archive: Activar se precisar de página de listagem
|
|
└── Admin Columns: Mostrar meta fields na tabela admin
|
|
```
|
|
|
|
## Meta Boxes e Campos
|
|
|
|
### Tipos de Campos
|
|
|
|
| Tipo | Uso |
|
|
|------|-----|
|
|
| `text` | Texto simples |
|
|
| `textarea` | Texto longo |
|
|
| `wysiwyg` | Editor rich text |
|
|
| `number` | Valor numérico |
|
|
| `select` | Dropdown de opções |
|
|
| `checkbox` | Verdadeiro/falso |
|
|
| `checkbox-list` | Múltipla selecção |
|
|
| `radio` | Opção única |
|
|
| `date` | Data (timestamp) |
|
|
| `media` | Upload de ficheiro/imagem |
|
|
| `gallery` | Múltiplas imagens |
|
|
| `repeater` | Campo repetível (sub-campos) |
|
|
| `posts` | Relação simples (seleccionar posts) |
|
|
| `color-picker` | Cor HEX |
|
|
| `map` | Coordenadas geográficas |
|
|
| `html` | HTML estático (apenas display) |
|
|
|
|
### Repeater — Estrutura
|
|
|
|
```
|
|
Repeater Field "galeria_servicos":
|
|
├── sub-campo: imagem (media)
|
|
├── sub-campo: titulo (text)
|
|
└── sub-campo: descricao (textarea)
|
|
|
|
Aceder em PHP:
|
|
$items = get_post_meta($post_id, 'galeria_servicos', true);
|
|
foreach ($items as $item) { ... }
|
|
```
|
|
|
|
## Relations
|
|
|
|
### Tipos de Relação
|
|
|
|
| Tipo | Exemplo |
|
|
|------|---------|
|
|
| One-to-Many | 1 Empresa → N Colaboradores |
|
|
| Many-to-Many | N Projectos ↔ N Tags custom |
|
|
| Self-relation | Artigo relacionado com outros artigos |
|
|
| User-to-Post | Utilizador → N Reservas |
|
|
|
|
### Tabela SQL das Relações
|
|
|
|
```sql
|
|
-- wp_jet_rel_default
|
|
-- parent_object_id | child_object_id | rel_id (hash da relação)
|
|
|
|
-- Ler todos os filhos de um pai
|
|
SELECT child_object_id
|
|
FROM wp_jet_rel_default
|
|
WHERE parent_object_id = 123
|
|
AND rel_id = 'relacao_empresa_colaboradores';
|
|
|
|
-- Ler o pai a partir de um filho
|
|
SELECT parent_object_id
|
|
FROM wp_jet_rel_default
|
|
WHERE child_object_id = 456
|
|
AND rel_id = 'relacao_empresa_colaboradores';
|
|
```
|
|
|
|
**Importante:** Nunca editar esta tabela directamente via SQL para criar relações — usar a API PHP do JetEngine (ver `references/automation.md`).
|
|
|
|
## Query Builder
|
|
|
|
Substitui o `WP_Query` com interface visual. Ligar ao Listing Grid.
|
|
|
|
### Tipos de Query
|
|
|
|
| Tipo | Usa |
|
|
|------|-----|
|
|
| Posts | CPT, posts, páginas |
|
|
| Terms | Taxonomias |
|
|
| Users | Utilizadores WP |
|
|
| Custom Content Type | Tabelas CCT |
|
|
| REST API | Endpoint externo |
|
|
|
|
### Configurar Query Posts
|
|
|
|
```
|
|
JetEngine > Query Builder > Add New
|
|
├── Query Type: Posts
|
|
├── Post Type: [seleccionar CPT]
|
|
├── Order By: date / meta_value / rand / menu_order
|
|
├── Meta Query: adicionar condições de meta fields
|
|
├── Tax Query: filtrar por taxonomia
|
|
└── Author: específico ou current user
|
|
```
|
|
|
|
### Usar no Listing Grid
|
|
|
|
```
|
|
Elemento Elementor: Listing Grid
|
|
├── Listing Item: [seleccionar Listing Template]
|
|
├── Use Custom Query: YES → seleccionar Query criado acima
|
|
├── Items per page: N
|
|
└── Pagination: Activar se necessário
|
|
```
|
|
|
|
## Listing Grid e Listing Template
|
|
|
|
### Criar Listing Template
|
|
|
|
```
|
|
JetEngine > Listings > Add New
|
|
├── Template Type: Default / Popup
|
|
├── Content From: Posts / CCT / User / Term
|
|
└── Editar com Elementor → usar Dynamic Tags
|
|
```
|
|
|
|
### Dynamic Tags no Listing Template
|
|
|
|
```
|
|
Post Title → {{ post_title }}
|
|
Field de Meta → Meta Field → seleccionar nome do campo
|
|
Imagem → Featured Image → meta field media
|
|
Link → Post URL / Custom Field URL
|
|
Relação → Relation Field
|
|
```
|
|
|
|
### Listing Map
|
|
|
|
```
|
|
JetEngine > Listings > Add New > Template Type: Map
|
|
├── Configurar campo de coordenadas (tipo: map no meta box)
|
|
├── Google Maps API Key: WP Admin > JetEngine > Settings
|
|
└── Ligar ao Query Builder
|
|
```
|
|
|
|
## Dynamic Content e Macros
|
|
|
|
### Macros Comuns
|
|
|
|
```
|
|
%current_user_id% # ID do utilizador logado
|
|
%current_post_id% |