Files
claude-plugins/wordpress/skills/crocoblock/references/patterns.md
Emanuel Almeida 9404af7ac9 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>
2026-03-05 17:16:32 +00:00

221 lines
6.2 KiB
Markdown

# 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*