feat: sync all plugins, skills, agents updates

New plugins: core-tools
New skills: auto-expense, ticket-triage, design, security-check,
  aiktop-tasks, daily-digest, imap-triage, index-update, mindmap,
  notebooklm, proc-creator, tasks-overview, validate-component,
  perfex-module, report, calendar-manager
New agents: design-critic, design-generator, design-lead,
  design-prompt-architect, design-researcher, compliance-auditor,
  metabase-analyst, gitea-integration-specialist
Updated: all plugin configs, knowledge datasets, existing skills

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 17:16:15 +00:00
parent f2b5171ea2
commit 9404af7ac9
184 changed files with 20865 additions and 1993 deletions

View File

@@ -0,0 +1,241 @@
---
name: crocoblock
description: >
Crocoblock ecosystem development with all JetPlugins for Elementor. Covers plugin selection, licensing, installation,
configuration and integration between JetEngine, JetSmartFilters, JetWooBuilder, JetElements, JetPopup, JetFormBuilder,
JetTabs, JetBlocks, JetSearch, JetBooking, JetThemeCore, JetReviews, JetTricks, JetCompareWishlist.
This skill should be used when the user asks about "crocoblock", "jet plugins", "jetelements", "jetwoobuilder",
"jetpopup", "jetsmartfilters", "jettabs", "jetformbuilder", "jetblocks", "jetbooking", "jetreviews",
"jetthemecore", "crocoblock license", "instalar crocoblock", "activar jet plugins", "ecosystem crocoblock",
"crocoblock subscription", "jet plugin escolher", "qual jet plugin usar", "crocoblock vs", "filtros ajax elementor",
"listing woocommerce elementor", "popup elementor crocoblock", "booking elementor", "reviews elementor".
author: Descomplicar® Crescimento Digital
version: 1.0.0
user_invocable: true
tags: [wordpress, elementor, crocoblock, jetengine, jetelements, jetsmartfilters, jetformbuilder]
allowed-tools: Read, Write, Edit, Bash, mcp__ssh-unified__ssh_execute, mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments
category: dev
quality_score: 80
updated: "2026-02-18T00:00:00Z"
---
# /crocoblock — Ecossistema Crocoblock + JetPlugins
Desenvolvimento com o ecossistema Crocoblock: suite de plugins para Elementor cobrindo CPT, filtros AJAX, WooCommerce, forms, popups, booking e muito mais.
## Matriz de Plugins
| Plugin | Função Principal | Quando Usar |
|--------|-----------------|-------------|
| **JetEngine** | CPT, Meta Boxes, Relations, Query Builder, Listings, Dynamic Content | Qualquer site com conteúdo dinâmico/estruturado |
| **JetSmartFilters** | Filtros AJAX para listings e arquivos | Catálogos, portfolios, diretórios filtráveis |
| **JetWooBuilder** | Templates WooCommerce com Elementor | Lojas com design personalizado de produto/categoria/checkout |
| **JetElements** | Widgets adicionais (Timeline, Progress Bar, Circle Progress, Maps) | Adicionar widgets não disponíveis no Elementor base |
| **JetPopup** | Popups com triggers avançados | Lead capture, notificações, banners condicionais |
| **JetFormBuilder** | Forms com lógica condicional + notificações | Formulários complexos, integração CRM, booking light |
| **JetTabs** | Tabs, Accordions, Toggle | Conteúdo tabulado interactivo |
| **JetBlocks** | Widgets para header/footer (nav, cart, search) | Cabeçalhos e rodapés custom no Theme Builder |
| **JetSearch** | Pesquisa AJAX avançada | Sites com necessidade de search instantâneo |
| **JetBooking** | Sistema de booking/reservas | Alojamento, serviços com calendário de disponibilidade |
| **JetThemeCore** | Theme Builder alternativo ao Elementor Pro | Theme Builder sem licença Elementor Pro |
| **JetReviews** | Reviews/ratings para qualquer CPT | Reviews além de WooCommerce |
| **JetTricks** | Efeitos visuais (parallax, hotspot, unfold) | Elementos visuais avançados |
| **JetCompareWishlist** | Comparar e wishlist para produtos/CPT | E-commerce ou catálogos com comparação |
## Licença e Instalação
### Subscrição Crocoblock
```
Planos: Single Site / 3 Sites / Unlimited Sites (anual ou lifetime)
Todos os planos incluem todos os plugins + atualizações
Dashboard: account.crocoblock.com > Downloads
```
### Instalação (CWP)
```bash
PHP="/opt/alt/php-fpm83/usr/bin/php"
WP="$PHP /usr/local/bin/wp --allow-root --path=/home/USER/public_html"
# 1. Upload do ZIP via WP Admin ou WP-CLI
$WP plugin install /tmp/jet-engine.zip --activate
# 2. Activar licença (via WP Admin > JetPlugins Licences)
# Cada plugin tem campo de licença separado
# Ou activar globalmente em Crocoblock > License
# 3. Verificar versões
$WP plugin list --search="jet*" --fields=name,version,status --format=table
```
### Ordem de Instalação Recomendada
```
1. JetEngine (base do ecossistema — criar antes de outros)
2. JetSmartFilters (depende do JetEngine para filtrar listings)
3. JetElements (widgets independentes)
4. JetWooBuilder (se WooCommerce presente)
5. JetFormBuilder (forms independentes)
6. JetPopup (depende de Elementor Pro ou JetThemeCore)
7. JetBlocks (apenas se Theme Builder activo)
8. Restantes (conforme necessidade)
```
## Integrações Principais
### JetEngine + JetSmartFilters (padrão mais comum)
```
JetEngine Query Builder → Listing Grid → JetSmartFilters
Filtros ligados ao mesmo Query Builder ID
```
**Passos:**
1. Criar CPT no JetEngine
2. Criar Query Builder (tipo: Posts)
3. Criar Listing Template com Elementor
4. Adicionar Listing Grid ao Elementor (apontar para o Query)
5. Adicionar Filter Widget e ligar ao mesmo Listing Grid
### JetEngine + JetWooBuilder
```
CPT Produto (WooCommerce) → JetEngine Meta Boxes → JetWooBuilder Template
Campos custom visíveis no template
```
### JetEngine + JetFormBuilder
```
JetFormBuilder → Submit → Create/Update JetEngine Post
→ Notificação email
→ Redirect
```
### JetPopup Triggers Disponíveis
| Trigger | Uso |
|---------|-----|
| On page load | Newsletter, anúncio |
| Exit intent | Retenção de visitante |
| Scroll (%) | Conteúdo contextual |
| Click on element | Mais informação inline |
| After inactivity | Re-engagement |
| User logged in/out | Conteúdo condicional |
## Dify KB — Consultar Antes de Implementar
```javascript
// Dataset Crocoblock (primário)
mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "bdf85c26-1824-4021-92d1-be20501b35ac",
query: "[componente ou funcionalidade]"
})
// Dataset Crocoblock alternativo
mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "139cdf67-afce-46ec-9ccd-2a06040e5b9d",
query: "[componente ou funcionalidade]"
})
```
## Troubleshooting Comum
### Plugin não activa após upload
```bash
# Verificar se Elementor está activo (dependência)
$WP plugin list --search=elementor --fields=name,status
# Verificar erros PHP
$WP eval 'error_reporting(E_ALL); ini_set("display_errors", 1);' --allow-root --path=$PATH
# Limpar transients após activar
$WP transient delete --all --allow-root --path=$PATH
```
### Conflito entre versões
```
Regra: Manter todos os JetPlugins na mesma major version
Verificar: account.crocoblock.com > Changelogs para breaking changes
```
### Listings não actualizam após filtrar
```bash
# Regenerar CSS Elementor
$WP elementor flush-css --regenerate --allow-root --path=$PATH
# Limpar cache de objecto
$WP cache flush --allow-root --path=$PATH
```
## Padrões de Uso por Tipo de Site
### Site Corporativo / Portfolio
```
JetEngine (CPT: Projecto, Serviço, Testemunho)
+ JetSmartFilters (filtrar por categoria/tag)
+ JetElements (timeline, animações)
```
### E-commerce Avançado
```
WooCommerce + JetEngine (meta boxes extra)
+ JetWooBuilder (templates produto, categoria, cart)
+ JetCompareWishlist
+ JetSmartFilters (filtros loja)
```
### Directório / Listagem de Negócios
```
JetEngine (CPT: Negócio, com Relations para Categoria/Localização)
+ JetSmartFilters (filtros AJAX por localização, categoria, preço)
+ JetSearch (pesquisa instantânea)
+ JetEngine Maps (mapa de listagens)
```
### Portal com Accounts de Utilizador
```
JetEngine (CPT, Profile Builder)
+ JetFormBuilder (submissão de conteúdo por utilizador)
+ JetEngine Relations (conteúdo associado ao utilizador)
```
### Site com Reservas
```
JetBooking (calendário + disponibilidade)
+ JetFormBuilder (form de reserva)
+ JetEngine (meta boxes de propriedade/serviço)
```
## JetEngine MCP Server (v3.8.0+)
A partir do JetEngine 3.8.0, existe integração nativa com agentes IA via **MCP Server**:
```
WP Admin > JetEngine > AI Command Center > Enable MCP Server
→ Claude pode inspecionar schema completo (CPTs, CCTs, Relações, Queries)
→ e criar/modificar estruturas via linguagem natural
```
Usar `references/automation.md` para detalhes sobre Formless Actions, JetSmartFilters Indexer e pipelines de automação.
## Referências Adicionais
- **`references/plugins.md`** — Referência detalhada de cada plugin (widgets, configurações, casos de uso avançados)
- **`references/patterns.md`** — Padrões de integração avançados (multi-relation, filtros aninhados, profile builder completo)
- **`references/automation.md`** — MCP Server nativo, JetFormBuilder Formless Actions, JetSmartFilters Indexer, Kits export/import, cache e riscos críticos
---
**Versão**: 1.1.0 | **Autor**: Descomplicar® | **Data**: 18-02-2026

View File

@@ -0,0 +1,294 @@
# Crocoblock — Automação Headless e Integrações Avançadas
## 1. JetEngine 3.8.0 — MCP Server Nativo
A partir da versão 3.8.0, o JetEngine inclui um **MCP Server nativo** que expõe a topologia completa do site a agentes IA (Claude, Copilot, Cursor).
### Activar o MCP Server
```
WP Admin > JetEngine > AI Command Center > Enable MCP Server
→ URL do servidor: https://site.pt/wp-json/jet-engine/v1/mcp
→ Autenticação: Application Password
```
### Capacidades do MCP
| Capacidade | Descrição |
|-----------|-----------|
| Inspecção de schema | Lista CPTs, CCTs, Meta Boxes, Taxonomias, Relações |
| Criação de CPT | Instanciar novo Custom Post Type via prompt |
| Criação de CCT | Definir Custom Content Type com campos tipados |
| Definir relações | Criar estruturas relacionais entre entidades |
| Query Builder | Criar queries estruturadas |
**Caso de uso:** Cliente especifica necessidades → Claude interroga MCP → constrói arquitectura completa (CPT + CCT + Relations + Queries) sem GUI.
---
## 2. JetFormBuilder — Formless Actions Endpoints
O addon **Formless Actions Endpoints** permite usar as acções de um formulário JetFormBuilder como endpoint REST puro, sem renderizar formulário no frontend.
### Como Activar
```
JetFormBuilder > Settings > Formless Actions Endpoints: Enable
Cada formulário recebe rota: POST /wp-json/jet-fb/v1/form/{form_id}
```
### Payload de Exemplo
```bash
# Submeter dados para formulário sem interface visual
# Acciona todas as Post Submit Actions configuradas (Create Post, Email, Webhook, etc.)
curl -X POST https://site.pt/wp-json/jet-fb/v1/form/1234 \
-H "Authorization: Basic dXNlcjpwYXNz..." \
-H "Content-Type: application/json" \
-d '{
"nome_cliente": "Empresa ABC",
"email": "contacto@empresaabc.pt",
"valor_contrato": 5000,
"tipo_servico": "website"
}'
```
### Encadear Acções Complexas
```
Um único request pode:
1. Criar Post no CPT "Projecto" com status pending
2. Enviar email ao admin
3. Actualizar relação Cliente↔Projecto
4. Enviar Webhook para n8n
5. Criar registo em CCT "Notificacoes"
```
### Interceptar com Hook Custom
```php
<?php
// Interceptar antes de gravar para validação externa
add_action('jet-form-builder/custom-action/analise_risco', function($request, $action_handler) {
$dados = $request->get_all();
$texto = sanitize_textarea_field($dados['descricao'] ?? '');
$post_id = absint($dados['post_id'] ?? 0);
if (empty($texto) || !$post_id) {
// Cancelar o processamento com erro
throw new \Jet_Form_Builder\Exceptions\Action_Exception('campos_obrigatorios_vazios');
}
// Validação via API externa (exemplo: análise de risco)
$score = minha_api_de_risco($texto);
if ($score > 90) {
throw new \Jet_Form_Builder\Exceptions\Action_Exception('risco_inaceitavel');
}
// Actualizar meta field com o score calculado
update_post_meta($post_id, '_score_risco', $score);
$action_handler->add_response([
'status' => 'success',
'message' => 'Processado com sucesso.',
'score' => $score,
]);
}, 10, 2);
```
### Tabela de Registos
```sql
-- JetFormBuilder guarda registo de cada submissão
SELECT *
FROM wp_jet_fb_records
WHERE form_id = 1234
ORDER BY id DESC
LIMIT 10;
```
---
## 3. JetSmartFilters — Indexer e Automação
### O Indexer
O JetSmartFilters tem um subsistema de contagem chamado **Indexer** que mapeia contadores em `jet_smart_filters_indexer`.
```sql
-- Ver contagens indexadas
SELECT * FROM jet_smart_filters_indexer
WHERE filter_id = 550
LIMIT 20;
```
**Problema:** Após actualizações SQL directas nas tabelas CCT ou wp_jet_rel_default, os contadores dos filtros ficam desactualizados.
**Solução:**
```php
<?php
// Recalcular Indexer após bulk update
add_action('meu_evento_pos_atualizacao', function() {
if (function_exists('jet_smart_filters')) {
jet_smart_filters()->indexer->index_all();
}
});
```
```bash
# Via WP-CLI
PHP="/opt/alt/php-fpm83/usr/bin/php"
WP="$PHP /usr/local/bin/wp --allow-root --path=/home/USER/public_html"
$WP eval "jet_smart_filters()->indexer->index_all();"
```
### Manipular Filtros Programaticamente
```php
<?php
// Injectar limites automáticos num filtro (ex: baseado no role do utilizador)
add_filter('jet-smart-filters/filter-instance/args', function($args, $filter_instance) {
// Só aplicar ao filtro #2550
if ((int) $args['filter_id'] !== 2550) {
return $args;
}
// Forçar range baseado em contexto (ex: permissões do utilizador)
$args['current_value'] = [
'min' => '100',
'max' => '500',
];
// Forçar AJAX
$args['apply_type'] = 'ajax';
return $args;
}, 10, 2);
```
### Forçar Re-indexação após SQL Massivo
```php
<?php
// Pipeline completo pós-sync ERP (exemplo: n8n aciona via HTTP)
add_action('rest_api_init', function() {
register_rest_route('descomplicar/v1', '/reindex', [
'methods' => 'POST',
'callback' => function() {
wp_cache_flush();
\Jet_Engine\Query_Builder\Manager::instance()->listings_cache->clear();
jet_smart_filters()->indexer->index_all();
return rest_ensure_response(['success' => true, 'message' => 'Re-indexação concluída.']);
},
'permission_callback' => function() {
return current_user_can('edit_posts');
},
]);
});
```
---
## 4. Kits e Templates — Export/Import Programático
### Estrutura de um Kit
```
Kit JSON (manifest.json):
├── CPTs com todas as configurações
├── CCTs com schema de campos
├── Meta Boxes
├── Taxonomias
├── Relações
├── Query Builder queries
├── Listing Templates (Elementor)
└── JetFormBuilder forms
```
### Export via WP-CLI
```bash
PHP="/opt/alt/php-fpm83/usr/bin/php"
WP="$PHP /usr/local/bin/wp --allow-root --path=/home/USER/public_html"
# Exportar estrutura JetEngine para JSON
$WP eval '
$cpts = get_option("jet_engine_cpt", []);
$ccls = get_option("jet_engine_ccl", []);
$rels = get_option("jet_engine_relations", []);
$metas = get_option("jet_engine_meta_boxes", []);
$kit_data = compact("cpts", "ccls", "rels", "metas");
file_put_contents("/tmp/kit-jetengine.json", json_encode($kit_data, JSON_PRETTY_PRINT));
'
echo "Kit exportado para /tmp/kit-jetengine.json"
```
### Import em Novo Ambiente
```bash
# ATENÇÃO: os IDs das relações mudam entre ambientes
# Sempre usar slugs como referência, não IDs numéricos
$WP eval-file /tmp/import-kit.php
$WP cache flush
$WP rewrite flush
```
### Pitfall de Migração — IDs de Relações
```
Problema: CCT item #45 no staging → ID #45
Mesmo item no production após import → ID #102
→ Relações wp_jet_rel_default ficam com IDs errados
Solução: Usar slug/título como referência durante migração
Converter para ID após import via get_posts(['name' => 'slug'])
Ou usar WP All Import para recriar relações com mapeamento de IDs
```
---
## 5. Integração WooCommerce + JetEngine
### Queries em Produtos WooCommerce
```
Produtos WooCommerce são CPT 'product' → compatíveis com JetEngine
Query Builder pode filtrar produtos por meta fields JetEngine adicionados
JetWooBuilder consome estas queries para listagens customizadas
```
### Relações com Produtos
```sql
-- Produtos relacionados com CPT "Fornecedor" via JetEngine Relations
SELECT p.post_title AS produto, f.post_title AS fornecedor
FROM wp_posts p
JOIN wp_jet_rel_default r ON r.child_object_id = p.ID
JOIN wp_posts f ON f.ID = r.parent_object_id
WHERE r.rel_id = 'relacao_fornecedores_produtos'
AND p.post_status = 'publish';
```
---
## 6. Limitações e Riscos Críticos
| Risco | Impacto | Mitigação |
|-------|---------|-----------|
| SQL directo em wp_postmeta serializado | **Crítico** — corrupção de dados | NUNCA. Usar PHP `unserialize → edit → serialize` |
| store_items_type = "replace" na REST API | **Destrutivo** — apaga todas as relações | Usar "update" salvo intenção explícita |
| Alterar wp_options serializados via SQL | **Crítico** — instalação WordPress corrompida | Sempre via PHP `get_option → update_option` |
| SQL sem flush de cache | Dados obsoletos em listings | Sempre `wp_cache_flush()` + `listings_cache->clear()` + `indexer->index_all()` |
| Registar meta boxes antes de init prioridade 12 | Falha silenciosa | Usar hook `jet-engine/meta-boxes/register-instances` |
| Importar Kit entre versões JetEngine diferentes | Dependências fantasma no Query Builder | Manter versões alinhadas em staging e production |
---
*Crocoblock Automation | Descomplicar® | 18-02-2026*

View File

@@ -0,0 +1,220 @@
# Crocoblock — Padrões de Integração Avançados
## Padrão 1: Directório com Filtros + Mapa
**Plugins:** JetEngine + JetSmartFilters + JetElements (Maps)
```
Arquitectura:
CPT "Negócio" (com meta: morada, coordenadas, categoria, horário)
Query Builder (posts, post_type=negocio)
┌────────────────┬──────────────────┐
│ Listing Grid │ Listing Map │
│ (cards) │ (pins) │
└────────────────┴──────────────────┘
↑ sincronizados ↑
JetSmartFilters:
- Categoria (checkbox, taxonomy)
- Localização (select, meta)
- Pesquisa (search text)
- Raio de distância (range, meta GPS)
```
**Configuração de sincronização:**
```
Listing Map > Settings:
├── Synchronize with Listing Grid: YES
└── Listing Grid Selector: ID do widget Listing Grid
JetSmartFilters > Apply For:
└── Seleccionar ID do Listing Grid
(o mapa segue automaticamente via sincronização)
```
---
## Padrão 2: Marketplace / Multi-vendor Simples
**Plugins:** JetEngine + JetFormBuilder + JetSmartFilters + Profile Builder
```
Fluxo do vendedor:
1. Registo (JetFormBuilder → Register User)
2. Login
3. Dashboard vendedor (Profile Builder)
4. Criar produto (JetFormBuilder → Create Post no CPT)
5. Produto aparece no catálogo (Listing Grid filtrado por author)
Fluxo do comprador:
1. Catálogo com filtros (JetSmartFilters)
2. Contactar vendedor (JetFormBuilder → Email ao author)
3. Ver perfil vendedor (Profile Builder page pública)
```
**Relations necessárias:**
```
User → N Produtos (one-to-many)
User → N Favoritos (many-to-many)
Produto → N Reviews (one-to-many, via JetReviews)
```
---
## Padrão 3: Portal de Imobiliário
**Plugins:** JetEngine + JetSmartFilters + JetWooBuilder (opcional) + JetBooking
```
CPT: Imóvel
Meta Boxes:
├── Preço (number)
├── Área m² (number)
├── Tipologia (select: T0/T1/T2/T3/T4+)
├── Tipo (select: venda/arrendamento)
├── Localização (taxonomy: Distrito → Concelho → Freguesia)
├── Coordenadas (map)
├── Galeria (gallery)
├── Características (checkbox-list: piscina, garagem, jardim...)
└── Agente responsável (posts: CPT Agente)
Query Builder:
├── Ordenação: data / preço / área
└── Meta Query: tipo = "arrendamento" (para página específica)
JetSmartFilters:
├── Range: Preço min-max
├── Range: Área min-max
├── Checkboxes: Tipologia
├── Select Hierarchical: Localização
├── Checkboxes: Características
└── Sorting: Preço ASC/DESC, Mais recentes
```
---
## Padrão 4: E-learning / Cursos
**Plugins:** JetEngine + JetFormBuilder + Profile Builder
```
CPTs:
├── Curso (conteúdo, preço, dutor)
├── Lição (sub-item do curso)
└── Avaliação (questionário)
Relations:
├── Curso → N Lições (one-to-many)
├── Utilizador → N Cursos Inscritos (many-to-many)
└── Utilizador → N Avaliações (one-to-many)
Profile Builder Pages:
├── Meus Cursos (Query: cursos onde utilizador está inscrito)
├── Continuar Lição (última lição acedida)
└── Certificados (download PDF após conclusão)
Automatização:
JetFormBuilder → compra → Inscrever no curso → Criar relação User↔Curso
```
---
## Padrão 5: Multi-Relation (Relações Aninhadas)
```
Exemplo: Agência → Clientes → Projectos → Tarefas
Relations JetEngine:
├── agencia_clientes: Agência (1) → Clientes (N)
├── cliente_projectos: Cliente (1) → Projectos (N)
└── projecto_tarefas: Projecto (1) → Tarefas (N)
No Listing Template de Agência:
├── Lista de Clientes (Relation Field Widget)
│ └── Dentro de cada Cliente: Lista de Projectos (nested listing)
│ └── Dentro de cada Projecto: Contador de Tarefas
Nota: Listings aninhados afectam performance.
Limitar a 2 níveis de profundidade.
Para listas longas, usar AJAX/JetSmartFilters paginado.
```
---
## Padrão 6: User-Generated Content (UGC)
**Plugins:** JetEngine + JetFormBuilder + Profile Builder + JetSmartFilters
```
Fluxo:
1. Utilizador logado → Dashboard (Profile Builder)
2. Formulário "Submeter Conteúdo" (JetFormBuilder)
→ Action: Create Post no CPT "Aviso" com status "pending"
→ Action: Email de notificação ao admin
3. Admin aprova → post_status = publish
4. Conteúdo aparece no listing público
Queries do Dashboard:
├── "Os meus avisos" → Query: author = %current_user_id% + status = any
└── "Aprovados" → Query: author = %current_user_id% + status = publish
Moderação rápida:
├── Admin lista pendentes com Listing Grid
└── JetFormBuilder inline para aprovar/rejeitar (Update Post Status)
```
---
## Padrão 7: JetBooking + WooCommerce + JetEngine
```
Fluxo de Reserva:
1. Página de serviço (CPT Serviço com meta JetEngine)
2. Calendário JetBooking (disponibilidade em tempo real)
3. Seleccionar datas → Form de reserva (JetFormBuilder ou JetBooking nativo)
4. Checkout WooCommerce (JetBooking cria produto temporário)
5. Pagamento → Reserva confirmada
6. Email de confirmação (JetBooking + SMTP)
7. Dashboard cliente (Profile Builder → Minhas Reservas)
Automatização n8n:
JetBooking webhook → n8n → Google Calendar → SMS (via Twilio)
```
---
## Anti-Padrões (Evitar)
### Demasiados JetPlugins Activos
```
Problema: Cada JetPlugin adiciona JS/CSS extra
Solução: Desactivar plugins não usados em cada site específico
Ferramenta: JetPlugins > Settings > Disable components não usados
```
### Listings Sem Paginação em Catálogos Grandes
```
Problema: Listing Grid sem paginação carrega todos os posts → PHP timeout
Solução: Sempre activar paginação ou Load More em listas >20 items
```
### JetSmartFilters Sem AJAX
```
Problema: URL-based filters recarregam a página inteira
Uso correcto: AJAX filters para UX fluida; URL-based apenas para SEO
```
### Meta Boxes em CCT Desnecessariamente
```
CCT não suporta taxonomies nativas, comentários, revisões.
Usar CPT quando precisar dessas funcionalidades WordPress.
```
---
*Crocoblock Patterns | Descomplicar® | 18-02-2026*

View File

@@ -0,0 +1,240 @@
# Crocoblock — Referência Detalhada de Plugins
## JetElements
Widgets adicionais para Elementor. Não depende do JetEngine.
### Widgets Principais
| Widget | Uso |
|--------|-----|
| Animated Box | Caixa com flip/hover reveal |
| Circle Progress | Gauge circular animado |
| Timeline | Cronologia vertical/horizontal |
| Countdown Timer | Contador regressivo |
| Scroll Navigation | Navegação por secções |
| Maps | Google Maps avançado |
| Weather | Widget de meteorologia |
| Price List | Lista de preços |
| Progress Bar | Barra de progresso |
| Slider | Slider de imagens/conteúdo |
| Portfolio | Grid de portfolio com filtros |
| Testimonials | Slider de testemunhos |
---
## JetSmartFilters
Filtros AJAX para qualquer listing (JetEngine, WooCommerce, Archive).
### Tipos de Filtros
| Tipo | Quando Usar |
|------|-------------|
| Checkboxes | Categorias múltiplas |
| Radio | Opção única (ordenação) |
| Select | Dropdown de valores |
| Range | Preço, área (slider min-max) |
| Date Range | Filtrar por datas |
| Search | Pesquisa por texto |
| Rating | Filtrar por estrelas |
| Color Picker | Filtros visuais por cor |
### Configuração Essencial
```
1. Criar filter em JetSmartFilters > Filters
2. Seleccionar Source: JetEngine Query / WC_Query / WP_Query
3. Seleccionar Field: meta field / taxonomy / post field
4. Adicionar Filter Widget ao Elementor
5. Ligar ao Listing Grid via "Apply filters for" (seleccionar ID do listing)
```
### Filtros Aninhados (Dependent Filters)
```
Exemplo: Distrito → Concelho (filho depende do pai)
- Configurar taxonomy pai e filho no JetEngine
- Em JetSmartFilters: activar "Hierarchical taxonomy filter"
- Ou usar "Visible terms" com condição dinâmica
```
---
## JetWooBuilder
Templates custom para WooCommerce via Elementor.
### Templates Disponíveis
| Template | Substitui |
|----------|-----------|
| Shop (Archive) | Página principal da loja |
| Product | Single product page |
| Cart | Página de carrinho |
| Checkout | Página de checkout |
| My Account | Dashboard do cliente |
| Thank You | Página pós-compra |
| Category | Página de categoria |
### Widgets JetWooBuilder
```
Products Grid # Grid de produtos com query custom
Product Price # Preço com styling avançado
Product Gallery # Galeria com thumbnails
Add to Cart # Botão com variantes
Product Tabs # Descrição, Reviews, Atributos
Related Products # Produtos relacionados
Mini Cart # Cart dropdown
```
### Configurar Template de Produto
```
1. JetWooBuilder > Templates > Add New
2. Template Type: Product
3. Editar com Elementor — arrastar widgets JetWoo
4. Conditions: incluir "Product" (todos) ou específico por categoria/tag
```
---
## JetFormBuilder
Forms com lógica condicional, integrações e notificações.
### Tipos de Campos
```
Text, Email, Tel, URL, Number, Textarea
Date, Time, DateTime
Select, Radio, Checkboxes
File Upload, Image Upload
Hidden Field, Calculated Field
Repeater Field (subformulário dinâmico)
```
### Acções Pós-Submit
| Acção | Função |
|-------|--------|
| Send Email | Notificação email standard |
| Send Email (Advanced) | Template HTML customizado |
| Create Post | Criar CPT (com JetEngine) |
| Update User | Actualizar user meta |
| Webhook | Enviar para n8n/Make/Zapier |
| Redirect | Redirecionar após submit |
| Register User | Criar conta WP |
| Login User | Login automático |
| MailChimp/ActiveCampaign | Subscrição newsletter |
### Formulário Silencioso (Para n8n)
```php
// Receber POST externo que passa pelas validações do JetFormBuilder
// Criar formulário com campos que correspondem ao payload
// Submeter via HTTP POST para: /wp-json/jet-form-builder/v1/process-form
// Autenticação: Application Passwords
```
---
## JetPopup
Popups com triggers e condições de display avançadas.
### Triggers
| Trigger | Config |
|---------|--------|
| On Page Load | Delay em segundos |
| Exit Intent | Detecta movimento para fora |
| Scroll to Element | Scroll até % ou selector CSS |
| Click on Element | Selector CSS do trigger |
| After Inactivity | Segundos sem interacção |
| After N Page Views | Contador de visitas |
| Once Per Session | Não repete na sessão |
### Conditions (Display)
```
URL match / URL contains
User logged in / out
User role
Device type (mobile/desktop)
WooCommerce: cart empty/not empty, specific product in cart
JetEngine: post type, taxonomy, specific post
```
---
## JetBooking
Sistema de booking com calendário de disponibilidade.
### Fluxo Base
```
1. Configurar Unidade de Booking (ex: Quarto, Serviço)
2. Definir preços (diários, por horas, temporada)
3. Definir disponibilidade e check-in/check-out rules
4. Criar template de booking com Elementor
5. Adicionar Calendário + Booking Form ao template
6. Configurar emails de confirmação
```
### Integração WooCommerce
```
JetBooking → WooCommerce Product → Checkout WooCommerce
- Preço calculado automaticamente (n noites × preço/noite)
- Stock = disponibilidade do calendário
```
---
## JetBlocks
Widgets para construir headers e footers com Elementor.
### Widgets Disponíveis
```
Navigation Menu # Menu responsivo avançado
Site Logo # Logo com dark mode toggle
Cart Button # Contador de itens no carrinho
Search Box # Pesquisa com AJAX
Auth Links # Login/Logout dinâmico
User Name # Nome do utilizador logado
Breadcrumbs # Fil d'Ariane
Mobile Menu # Menu hamburger
```
---
## JetThemeCore
Theme Builder alternativo ao Elementor Pro (para licenças Free).
### Templates
```
Header / Footer
Single (Posts, CPT)
Archive (Category, Tag, CPT Archive)
Search Results
404
```
### Diferença vs Elementor Pro Theme Builder
```
JetThemeCore: Gratuito, condições básicas
Elementor Pro: Mais condições, melhor integração com Popup Builder
Recomendação: Usar Elementor Pro se disponível
```
---
*Crocoblock Plugins Reference | Descomplicar® | 18-02-2026*