feat: refactor 30+ skills to Anthropic progressive disclosure pattern

- All SKILL.md files now <500 lines (avg reduction 69%)
- Detailed content extracted to references/ subdirectories
- Frontmatter standardised: only name + description (Anthropic standard)
- New skills: brand-guidelines, spec-coauthor, report-templates, skill-creator
- Design skills: anti-slop guidelines, premium-proposals reference
- Removed non-standard frontmatter fields (triggers, version, author, category)

Plugins affected: infraestrutura, marketing, dev-tools, crm-ops, gestao,
core-tools, negocio, perfex-dev, wordpress, design-media

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 15:05:03 +00:00
parent 9404af7ac9
commit 6b3a6f2698
397 changed files with 67154 additions and 17257 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "wordpress",
"description": "WordPress development, maintenance and optimization - plugins, themes, WooCommerce, Elementor, Crocoblock. Backed by 6 Dify KB datasets.",
"description": "WordPress development, maintenance and optimization - plugins, themes, WooCommerce, Elementor, Crocoblock. Backed by NotebookLM notebooks.",
"version": "1.0.0",
"author": {
"name": "Descomplicar - Crescimento Digital",

View File

@@ -16,7 +16,6 @@ primary_mcps:
recommended_mcps:
- context7
- filesystem
- dify-kb
skills:
- _core
desk_task: null
@@ -39,8 +38,6 @@ created: '2025-01-13'
updated: '2026-02-04'
author: Descomplicar®
---
# Elementor Specialist Descomplicar
Especialista em desenvolvimento com Elementor Pro e criação de websites visuais.
@@ -82,9 +79,6 @@ Especialista em desenvolvimento com Elementor Pro e criação de websites visuai
```
mcp__notebooklm__notebook_query notebook_id:"5be0d1a6-00f2-4cd9-b835-978cb7721601" query:"<tema>"
```
### Dify KB (Secundario)
- Wordpress
- Elementor
- Crocoblock
@@ -143,7 +137,7 @@ Especialista em page building com Elementor Pro, entregando websites visuais de
## MCPs Relevantes
- `ssh-unified`: Deploy e actualização de sites WordPress
- `desk-crm-v3`: Gestão de projectos clientes
- `notebooklm`: KB primaria (Gemini 2.5 RAG) | `dify-kb`: KB WordPress, Elementor, Crocoblock
- `notebooklm`: KB primaria (Gemini 2.5 RAG) | ``: KB WordPress, Elementor, Crocoblock
## Colaboracao
@@ -165,9 +159,9 @@ Especialista em page building com Elementor Pro, entregando websites visuais de
- Gemini 2.5 RAG
- Usage: `mcp__notebooklm__notebook_query`
**dify-kb** (knowledge fallback)
**** (knowledge fallback)
- Knowledge base AI
- Usage: `mcp__dify-kb__*`
- Usage: `mcp____*`
### Recommended for dev
- **gitea** - Repositórios Git, issues, PRs
@@ -179,13 +173,11 @@ Especialista em page building com Elementor Pro, entregando websites visuais de
- **cwp** - CentOS Web Panel
- **puppeteer** - Browser automation
### All Available (33 total)
### All Available (32 total)
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
**Discovery:** Use ToolSearch to find specific tools.
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
## Your Available Skills
### Primary Skills (Your Domain)
@@ -219,7 +211,7 @@ moloni, google-analytics, google-workspace, imap, outline-api, youtube-research,
- **/knowledge** - Gestão unificada de conhecimento - pesquisa inteligente com
- **/desk** - Integração com Desk CRM via ficheiro .desk-project. Auto-det
### All Available (54 total)
### All Available (53 total)
/billing-check, /crm-ops, /ecommerce, /lead-approach, /orcamento, /saas, /content-marketing-pt, /remotion-video, /seo-content-optimization, /social-media, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
**Discovery:** Use the Skill tool to invoke skills.

View File

@@ -41,8 +41,6 @@ created: '2025-01-13'
updated: '2026-02-04'
author: Descomplicar®
---
# WooCommerce Specialist Descomplicar
Especialista em desenvolvimento e optimizacao de lojas WooCommerce, focado em gateways de pagamento PT, checkout optimizado e integracoes com sistemas de facturacao.
@@ -122,13 +120,6 @@ mcp__notebooklm__notebook_query notebook_id:"5be0d1a6-00f2-4cd9-b835-978cb772160
mcp__notebooklm__notebook_query notebook_id:"226e384e-d4bc-48f4-bb82-7927360436cc" query:"checkout conversao pagamentos"
```
### Dify KB (Secundario - se NotebookLM insuficiente)
```
mcp__dify-kb__dify_kb_retrieve_segments dataset:"WordPress" query:"WooCommerce e-commerce plugins"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"E-commerce" query:"checkout conversao pagamentos"
```
## Colaboracao
- Reports to: E-commerce Strategist
- Colabora com: WordPress Plugin Developer, Payment Integration Specialist
@@ -150,18 +141,16 @@ mcp__dify-kb__dify_kb_retrieve_segments dataset:"E-commerce" query:"checkout con
- **n8n** - Workflows automation
- **filesystem** - Ficheiros locais
- **magic** - AI-powered UI component generation (tipo v0.dev)
- **dify-kb** - Knowledge base AI
- **** - Knowledge base AI
- **memory-supabase** - Memória longo prazo
- **cwp** - CentOS Web Panel
- **puppeteer** - Browser automation
### All Available (33 total)
### All Available (32 total)
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
**Discovery:** Use ToolSearch to find specific tools.
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
## Your Available Skills
### Primary Skills (Your Domain)
@@ -195,7 +184,7 @@ moloni, google-analytics, google-workspace, imap, outline-api, youtube-research,
- **/knowledge** - Gestão unificada de conhecimento - pesquisa inteligente com
- **/desk** - Integração com Desk CRM via ficheiro .desk-project. Auto-det
### All Available (54 total)
### All Available (53 total)
/billing-check, /crm-ops, /ecommerce, /lead-approach, /orcamento, /saas, /content-marketing-pt, /remotion-video, /seo-content-optimization, /social-media, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
**Discovery:** Use the Skill tool to invoke skills.

View File

@@ -40,8 +40,6 @@ created: '2025-01-13'
updated: '2026-02-04'
author: Descomplicar®
---
# WordPress Performance Specialist Descomplicar
Especialista em optimizacao de performance WordPress e WooCommerce, focado em maximizar velocidade, Core Web Vitals e experiencia do utilizador atraves de caching, optimizacao de base de dados e assets.
@@ -62,15 +60,6 @@ mcp__notebooklm__notebook_query notebook_id:"5be0d1a6-00f2-4cd9-b835-978cb772160
mcp__notebooklm__notebook_query notebook_id:"f9a79b5a-649f-4443-afaf-7ff562b6c2e7" query:"servidor PHP OPcache Redis"
```
### Dify KB (Secundario - se NotebookLM insuficiente)
```
mcp__dify-kb__dify_kb_retrieve_segments dataset:"WordPress" query:"performance caching optimizacao velocidade"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Elementor" query:"performance assets optimizacao"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Crocoblock" query:"performance JetEngine queries"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"TI" query:"servidor PHP OPcache Redis"
```
## System Prompt
### Papel
@@ -147,11 +136,6 @@ Especialista em optimizacao de performance WordPress responsavel por maximizar v
| CLS | <0.1 | <0.25 |
| TTFB | <600ms | <1.8s |
| PageSpeed Score | >90 | >50 |
## Datasets Dify (Consultar SEMPRE)
```
mcp__dify-kb__dify_kb_retrieve_segments dataset:"WordPress" query:"performance caching optimizacao"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"TI" query:"Redis PHP OPcache servidor"
```
## Colaboracao
@@ -176,13 +160,11 @@ mcp__dify-kb__dify_kb_retrieve_segments dataset:"TI" query:"Redis PHP OPcache se
- **mcp-time** - Hora actual, conversão fusos horários
- **puppeteer** - Browser automation
### All Available (33 total)
moloni, context7, gitea, n8n, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, dify-kb, wikijs, gsc, memory-supabase, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, magic, vimeo, design-systems, replicate
### All Available (32 total)
moloni, context7, gitea, n8n, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, memory-supabase, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, magic, vimeo, design-systems, replicate
**Discovery:** Use ToolSearch to find specific tools.
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
## Your Available Skills
### Primary Skills (Your Domain)
@@ -208,13 +190,11 @@ moloni, context7, gitea, n8n, google-analytics, google-workspace, imap, outline-
- **/knowledge** - Gestão unificada de conhecimento - pesquisa inteligente com
- **/desk** - Integração com Desk CRM via ficheiro .desk-project. Auto-det
### All Available (54 total)
### All Available (53 total)
/billing-check, /crm-ops, /ecommerce, /lead-approach, /orcamento, /saas, /content-marketing-pt, /remotion-video, /seo-content-optimization, /social-media, /video, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /second-brain-repo, /ads, /doc-sync, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /time, /today, /research, /youtube, /seo-audit, /seo-report, /metrics, /sdk
**Discovery:** Use the Skill tool to invoke skills.
**Example:** `Skill("skill-name")` invokes the skill.
## Your Team & Responsibilities
You are part of **2 SDKs** (TaskForce teams):
@@ -224,9 +204,6 @@ You are part of **2 SDKs** (TaskForce teams):
**Purpose:** NULL
**Your responsibilities in this TaskForce:**
- **Sistema de agentes especializados para delegacao de tarefas via Task tool com consulta automatica de datasets Dify.**: NULL
### TaskForce WordPress
**Purpose:** NULL

View File

@@ -27,7 +27,6 @@ recommended_mcps:
- n8n # Workflow automation
- filesystem # Local file operations
- magic # UI component generation
- dify-kb # Knowledge base
- memory-supabase # Long-term memory
- cwp # Server management
- puppeteer # Browser automation
@@ -103,15 +102,6 @@ mcp__notebooklm__notebook_query notebook_id:"5be0d1a6-00f2-4cd9-b835-978cb772160
mcp__notebooklm__notebook_query notebook_id:"24947ffa-0019-448a-a340-2f4a275d2eb1" query:"PHP arquitectura APIs"
```
### Dify KB (Secundario - se NotebookLM insuficiente)
```
mcp__dify-kb__dify_kb_retrieve_segments dataset:"WordPress" query:"plugins hooks filters desenvolvimento"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Crocoblock" query:"JetEngine custom post types dynamic"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Elementor" query:"widgets templates custom"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Desenvolvimento de Software" query:"PHP arquitectura APIs"
```
## System Prompt
### Papel

View File

@@ -1,5 +1,5 @@
{
"description": "Knowledge sources (NotebookLM + Dify KB) for WordPress domain",
"description": "Knowledge sources for WordPress domain",
"sources": {
"notebooklm": {
"description": "NotebookLM - conhecimento curado profundo via Gemini 2.5 RAG (PRIMARIO)",
@@ -10,58 +10,9 @@
"title": "WordPress e Elementor",
"topics": [
"wordpress"
],
"maps_from_dify": "WordPress"
}
]
},
"dify_kb": {
"description": "Dify KB - datasets tematicos (FALLBACK)",
"query_tool": "mcp__dify-kb__dify_kb_retrieve_segments",
"datasets": [
{
"id": "9da0b2b9-5051-4b99-b9f6-20bf35067092",
"name": "WordPress",
"priority": 1,
"document_count": 13,
"word_count": 819944
},
{
"id": "9c77d3e2-4d88-4a43-abff-d4e681267cc7",
"name": "Elementor",
"priority": 1,
"document_count": 32,
"word_count": 622946
},
{
"id": "139cdf67-afce-46ec-9ccd-2a06040e5b9d",
"name": "Crocoblock",
"priority": 1,
"document_count": 403,
"word_count": 7566111
},
{
"id": "bdf85c26-1824-4021-92d1-be20501b35ac",
"name": "Crocoblock 2",
"priority": 2,
"document_count": 25,
"word_count": 1429775
},
{
"id": "2e9b7c48-c630-457a-83a0-db8e77f76eae",
"name": "Kivicare",
"priority": 2,
"document_count": 178,
"word_count": 1085806
},
{
"id": "c8489151-de94-42b2-8cee-c0b961cfac6d",
"name": "Desenvolvimento de WebSites",
"priority": 2,
"document_count": 31,
"word_count": 4366521
]
}
]
}
}
}
}

View File

@@ -1,23 +1,6 @@
---
name: branda-menu
description: >
Organiza o menu admin WordPress via Branda (branda-white-labeling) em seccoes Descomplicar standard. Computa Branda IDs a partir de slugs WP, constroi menu custom com itens nativos reordenados + section headers, e guarda programaticamente via WP-CLI. Use when "branda menu", "organizar menu admin", "menu wordpress", "admin sidebar", "reorganizar admin".
author: Descomplicar Crescimento Digital
version: 1.0.0
quality_score: 85
user_invocable: true
category: wordpress
tags: [branda, wordpress, admin-menu, white-labeling, wip]
desk_project: 69
allowed-tools: Read, Write, Edit, Bash, mcp__ssh-unified, mcp__memory-supabase
mcps: ssh-unified, memory-supabase
dependencies:
mcps: [ssh-unified]
plugins: [branda-white-labeling]
triggers:
- "User mentions 'branda menu', 'organizar menu', 'admin sidebar'"
- "User asks to reorganize WordPress admin menu"
- "Setting up new WiP site admin customization"
description: Organizacao do menu admin WordPress via Branda (branda-white-labeling) em seccoes Descomplicar standard. Computa Branda IDs a partir de slugs WP, constroi menu custom e guarda programaticamente via WP-CLI.
---
# /branda-menu - Organizar Menu Admin WordPress
@@ -38,12 +21,10 @@ O Branda usa um modulo `admin/menu.php` que intercepta o render do menu admin Wo
|--------|--------|
| `ultimatebranding_activated_modules` | Modulos activos (precisa ter `admin/menu.php`) |
| `ub_custom_admin_menu` | Configuracao do menu custom por role |
| `ub_saved_admin_menus` | Captura do menu nativo WP (so para UI Branda, nao para render) |
| `ub_saved_admin_menus` | Captura do menu nativo WP (so para UI Branda) |
### Algoritmo de ID (critico)
O Branda mapeia slugs WordPress para IDs internos usando:
```php
function branda_id($slug) {
return "menu_item_" . substr(base_convert(md5($slug), 16, 32), 0, 12);
@@ -52,63 +33,35 @@ function branda_id($slug) {
**Exemplo:** `index.php` -> `menu_item_42ho017e7jo0`
Este algoritmo e determinista. O mesmo slug gera sempre o mesmo ID, independente do site.
### Tipos de itens no menu
| Tipo | Campos chave | Uso |
|------|-------------|-----|
| **Section header** | `link_type: "none"`, `css_classes: "menu-highlight"` | Separador visual com titulo |
| **Custom link** | `link_type: "custom"`, `custom_url: "..."` | Link manual (ex: Descomplicar) |
| **Native item** | `was_native: 1`, campos vazios | Item WP real, nome preenchido dinamicamente |
| **Hidden item** | `is_hidden: "1"`, `was_native: 1` | Item WP escondido do menu |
| **Custom link** | `link_type: "custom"`, `custom_url: "..."` | Link manual |
| **Native item** | `was_native: 1`, campos vazios | Item WP real |
| **Hidden item** | `is_hidden: "1"`, `was_native: 1` | Item WP escondido |
### Mecanismo de merge (parse_args_deep)
Na renderizacao, o Branda faz merge do menu configurado com o menu WP real:
- Itens nativos no config: aparecem na posicao configurada
- Itens nativos **nao** no config: inseridos na posicao default (aparecem misturados!)
- Itens custom: aparecem na posicao configurada
- Submenus vazios `[]`: auto-preenchidos com submenus reais do WP
**Regra critica:** Incluir **todos** os itens nativos no config (visiveis na posicao desejada OU hidden). Se faltar algum, aparece na posicao default e quebra a organizacao.
Na renderizacao, o Branda faz merge do menu configurado com o menu WP real. **Regra critica:** Incluir **todos** os itens nativos no config (visiveis ou hidden). Se faltar algum, aparece na posicao default e quebra a organizacao.
---
## Seccoes Standard Descomplicar (9)
Todo site WiP deve ter o menu organizado nestas 9 seccoes, nesta ordem:
| # | Seccao | Dashicon | Conteudo tipico |
|---|--------|----------|----------------|
| 1 | **Suporte** | dashicons-admin-tools | Link Descomplicar (desk.descomplicar.pt) |
| 1 | **Suporte** | dashicons-admin-tools | Link Descomplicar |
| 2 | **Admin** | dashicons-admin-generic | Painel, Utilizadores, Opcoes, Plugins, Ferramentas |
| 3 | **Conteudo** | dashicons-admin-page | Paginas, CPTs do projecto, Artigos, Multimedia, ACF |
| 3 | **Conteudo** | dashicons-admin-page | Paginas, CPTs, Artigos, Multimedia, ACF |
| 4 | **Design** | dashicons-admin-appearance | Elementor, Modelos, Jeg Kit, Apresentacao |
| 5 | **Marketing** | dashicons-megaphone | FluentCRM, Fluent Forms, Rank Math, WhatsApp, etc. |
| 5 | **Marketing** | dashicons-megaphone | FluentCRM, Fluent Forms, Rank Math, WhatsApp |
| 6 | **Idiomas** | dashicons-translation | Polylang/WPML, Loco Translate (se multilingue) |
| 7 | **Performance** | dashicons-performance | WP Fastest Cache, WebP Express |
| 8 | **Seguranca** | dashicons-shield | Wordfence, Complianz |
| 9 | **WebMaster** | dashicons-admin-settings | Branda, Code Snippets, Activity Log |
**Notas:**
- Seccao Idiomas so aparece se site for multilingue
- CPTs especificos do projecto (Tours, Servicos, etc.) vao em Conteudo
- Plugins sectoriais (KiviCare, WooCommerce, etc.) podem ter seccao propria entre Marketing e Idiomas
---
## Itens tipicamente hidden
Estes itens nativos devem ser incluidos no config com `is_hidden: "1"`:
| Slug | Motivo |
|------|--------|
| `separator1`, `separator2`, `separator-last` | Separadores nativos substituidos por section headers |
| `edit-comments.php` | Comentarios raramente usados |
| `hello-elementor` | Pagina tema redundante com themes.php |
| `elementor` | Menu Elementor duplicado (ja existe elementor-home) |
---
## Procedimento
@@ -116,7 +69,6 @@ Estes itens nativos devem ser incluidos no config com `is_hidden: "1"`:
### Passo 1: Verificar pre-requisitos
```bash
# Via MCP SSH - verificar Branda activo e modulo menu activo
mcp__ssh-unified__ssh_execute server:"server" command:"wp plugin is-active branda-white-labeling --allow-root --path=/home/USER/SITE && echo ACTIVE || echo INACTIVE"
# Verificar modulo menu activo
@@ -138,272 +90,25 @@ echo \"Activado\";
### Passo 2: Extrair menu nativo
Obter lista de plugins activos e menu WP via WP-CLI. Como WP-CLI nao carrega todos os menus admin, usar este metodo combinado:
**Opcao A (preferida): mu-plugin temporario** - criar mu-plugin que captura menu no proximo page load, depois ler a captura via `wp eval`.
**Opcao A (preferida): mu-plugin temporario**
```bash
# Criar mu-plugin que captura menu no proximo page load
mcp__ssh-unified__ssh_execute server:"server" command:"cat > /home/USER/SITE/wp-content/mu-plugins/capture-menu.php << 'PHPEOF'
<?php
/**
* Temporary mu-plugin to capture native admin menu for Branda
* Auto-removes after capture
*/
add_action('admin_menu', function() {
if (!current_user_can('manage_options')) return;
if (get_option('_branda_menu_captured')) return;
global \$menu, \$submenu;
// Save raw menu data
update_option('_branda_menu_capture', array(
'menu' => \$menu,
'submenu' => \$submenu,
'captured_at' => time()
));
update_option('_branda_menu_captured', true);
// Self-destruct
@unlink(__FILE__);
}, 999999);
PHPEOF
echo 'mu-plugin criado'
"
```
Depois, gerar cookie de auth e disparar um page load admin:
```bash
# Gerar cookie auth via WP-CLI
mcp__ssh-unified__ssh_execute server:"server" command:"wp eval '
\$expiration = time() + 300;
\$cookie = wp_generate_auth_cookie(1, \$expiration, \"logged_in\");
echo \$cookie;
' --allow-root --path=/home/USER/SITE"
# Disparar page load admin com curl (substituir COOKIE e HASH)
mcp__ssh-unified__ssh_execute server:"server" command:"curl -s -o /dev/null -w '%{http_code}' -b 'wordpress_logged_in_HASH=COOKIE' https://SITE/wp-admin/"
```
Depois ler a captura:
```bash
mcp__ssh-unified__ssh_execute server:"server" command:"wp eval '
\$cap = get_option(\"_branda_menu_capture\");
if (\$cap) {
foreach (\$cap[\"menu\"] as \$pos => \$item) {
if (count(\$item) >= 3) {
\$slug = \$item[2];
\$title = strip_tags(\$item[0]);
echo \"\$pos. \$title => \$slug\n\";
}
}
}
' --allow-root --path=/home/USER/SITE"
```
**Opcao B (alternativa): Chrome DevTools**
Se tiver acesso ao browser, navegar ao wp-admin e executar JS:
```javascript
Array.from(document.querySelectorAll('#adminmenu > li')).forEach((li, i) => {
const a = li.querySelector('a');
if (a) {
const name = a.querySelector('.wp-menu-name')?.textContent?.trim() || a.textContent?.trim();
const href = a.getAttribute('href') || '';
console.log(i + '. ' + name + ' => ' + href);
}
});
```
**Opcao B (alternativa): Chrome DevTools** - navegar ao wp-admin e executar JS para listar itens.
### Passo 3: Mapear itens para seccoes
Com a lista de itens nativos, mapear cada um para a seccao correcta.
**Mapeamento standard por slug:**
```
# Admin
index.php -> Admin
users.php -> Admin
options-general.php -> Admin
plugins.php -> Admin
tools.php -> Admin
# Conteudo
edit.php -> Conteudo (Artigos)
edit.php?post_type=page -> Conteudo (Paginas)
upload.php -> Conteudo (Multimedia)
edit.php?post_type=acf-field-group -> Conteudo (ACF)
edit.php?post_type=* -> Conteudo (CPTs)
# Design
elementor-home -> Design (Elementor)
edit.php?post_type=elementor_library -> Design (Modelos)
jkit -> Design (Jeg Kit)
themes.php -> Design (Apresentacao)
# Marketing
fluentcrm-admin -> Marketing
fluent_forms -> Marketing
rank-math -> Marketing
click-to-chat -> Marketing
# Idiomas (se multilingue)
mlang -> Idiomas (Polylang)
loco -> Idiomas (Loco Translate)
# Performance
wpfastestcacheoptions -> Performance
# Seguranca
Wordfence -> Seguranca
complianz -> Seguranca
# WebMaster
branding -> WebMaster (Branda)
wpcode -> WebMaster (Code Snippets)
# Hidden
separator1, separator2, separator-last -> Hidden
edit-comments.php -> Hidden
hello-elementor -> Hidden
elementor -> Hidden (duplicado de elementor-home)
```
**Itens que nao encaixam no standard:** Perguntar ao utilizador em que seccao colocar. Exemplos: WooCommerce, KiviCare, FareHarbor.
Mapeamento completo de slugs e IDs em: `references/mapeamento-slugs.md`
### Passo 4: Construir e guardar o menu
Criar um PHP script no servidor e executar com `wp eval-file`:
Script PHP template completo em: `references/script-template.md`
```bash
mcp__ssh-unified__ssh_execute server:"server" command:"cat > /tmp/branda-menu-SITE.php << 'PHPEOF'
<?php
/**
* Branda menu builder for SITENAME
* Generated by /branda-menu skill
*/
function branda_id(\$slug) {
return 'menu_item_' . substr(base_convert(md5(\$slug), 16, 32), 0, 12);
}
function native_item(\$subs = array()) {
return array(
'title' => '', 'id_attribute' => '', 'css_classes' => '',
'icon_svg' => '', 'icon_url' => '', 'icon_image_id' => '',
'dashicon' => '', 'icon_type' => '', 'custom_url' => '',
'link_type' => '', 'link_target' => '', 'is_invisible' => '',
'is_hidden' => '', 'was_native' => 1, 'submenu' => \$subs
);
}
function hidden_item() {
\$item = native_item();
\$item['is_hidden'] = '1';
return \$item;
}
function section_header(\$title, \$dashicon) {
return array(
'icon_type' => 'dashicon', 'link_type' => 'none',
'submenu' => array(), 'title' => \$title,
'css_classes' => 'menu-highlight', 'dashicon' => \$dashicon
);
}
function custom_link(\$title, \$url, \$dashicon, \$target = '') {
return array(
'icon_type' => 'dashicon', 'link_type' => 'custom',
'submenu' => array(), 'title' => \$title,
'dashicon' => \$dashicon, 'link_target' => \$target,
'custom_url' => \$url
);
}
// === BUILD MENU ===
\$menu = array();
// 1. SUPORTE
\$menu['menu_item_sec_suporte'] = section_header('Suporte', 'dashicons-admin-tools');
\$menu['menu_item_desk_link'] = custom_link('Descomplicar', 'https://desk.descomplicar.pt/', 'dashicons-admin-comments', '_blank');
// 2. ADMIN
\$menu['menu_item_sec_admin'] = section_header('Admin', 'dashicons-admin-generic');
\$menu[branda_id('index.php')] = native_item();
\$menu[branda_id('users.php')] = native_item();
\$menu[branda_id('options-general.php')] = native_item();
\$menu[branda_id('plugins.php')] = native_item();
\$menu[branda_id('tools.php')] = native_item();
// 3. CONTEUDO
\$menu['menu_item_sec_conteudo'] = section_header('Conteudo', 'dashicons-admin-page');
\$menu[branda_id('edit.php?post_type=page')] = native_item();
// [INSERIR CPTs DO PROJECTO AQUI]
\$menu[branda_id('edit.php')] = native_item();
\$menu[branda_id('upload.php')] = native_item();
\$menu[branda_id('edit.php?post_type=acf-field-group')] = native_item();
// 4. DESIGN
\$menu['menu_item_sec_design'] = section_header('Design', 'dashicons-admin-appearance');
\$menu[branda_id('elementor-home')] = native_item();
\$menu[branda_id('edit.php?post_type=elementor_library')] = native_item();
// \$menu[branda_id('jkit')] = native_item(); // Se Jeg Kit activo
\$menu[branda_id('themes.php')] = native_item();
// 5. MARKETING
\$menu['menu_item_sec_marketing'] = section_header('Marketing', 'dashicons-megaphone');
\$menu[branda_id('fluentcrm-admin')] = native_item();
\$menu[branda_id('fluent_forms')] = native_item();
\$menu[branda_id('rank-math')] = native_item();
\$menu[branda_id('click-to-chat')] = native_item();
// 6. IDIOMAS (se multilingue)
// \$menu['menu_item_sec_idiomas'] = section_header('Idiomas', 'dashicons-translation');
// \$menu[branda_id('mlang')] = native_item();
// \$menu[branda_id('loco')] = native_item();
// 7. PERFORMANCE
\$menu['menu_item_sec_performance'] = section_header('Performance', 'dashicons-performance');
\$menu[branda_id('wpfastestcacheoptions')] = native_item();
// 8. SEGURANCA
\$menu['menu_item_sec_seguranca'] = section_header('Seguranca', 'dashicons-shield');
\$menu[branda_id('Wordfence')] = native_item();
\$menu[branda_id('complianz')] = native_item();
// 9. WEBMASTER
\$menu['menu_item_sec_webmaster'] = section_header('WebMaster', 'dashicons-admin-settings');
\$menu[branda_id('branding')] = native_item();
\$menu[branda_id('wpcode')] = native_item();
// HIDDEN
\$menu[branda_id('separator1')] = hidden_item();
\$menu[branda_id('separator2')] = hidden_item();
\$menu[branda_id('separator-last')] = hidden_item();
\$menu[branda_id('edit-comments.php')] = hidden_item();
\$menu[branda_id('hello-elementor')] = hidden_item();
\$menu[branda_id('elementor')] = hidden_item();
// SAVE
update_option('ub_custom_admin_menu', array('administrator' => \$menu));
wp_cache_flush();
\$visible = count(array_filter(\$menu, function(\$i) { return empty(\$i['is_hidden']); }));
\$hidden = count(\$menu) - \$visible;
echo \"Menu guardado: \$visible visiveis + \$hidden hidden = \" . count(\$menu) . \" total\n\";
PHPEOF
echo 'Script criado'
"
# Executar
mcp__ssh-unified__ssh_execute server:"server" command:"wp eval-file /tmp/branda-menu-SITE.php --allow-root --path=/home/USER/SITE"
```
Executar com `wp eval-file` via SSH MCP.
### Passo 5: Verificar
```bash
# Contar itens no config
mcp__ssh-unified__ssh_execute server:"server" command:"wp eval '
\$m = get_option(\"ub_custom_admin_menu\");
\$items = \$m[\"administrator\"];
@@ -417,145 +122,40 @@ foreach (\$items as \$key => \$item) {
' --allow-root --path=/home/USER/SITE"
```
Verificar visualmente no browser: navegar ao wp-admin e confirmar que o menu esta organizado nas 9 seccoes.
Verificar visualmente no browser.
### Passo 6: Limpar
```bash
# Remover script temporario
mcp__ssh-unified__ssh_execute server:"server" command:"rm -f /tmp/branda-menu-SITE.php"
# Limpar captura temporaria (se usou mu-plugin)
mcp__ssh-unified__ssh_execute server:"server" command:"wp eval '
delete_option(\"_branda_menu_capture\");
delete_option(\"_branda_menu_captured\");
echo \"Limpo\";
' --allow-root --path=/home/USER/SITE"
# Garantir mu-plugin removido
mcp__ssh-unified__ssh_execute server:"server" command:"rm -f /home/USER/SITE/wp-content/mu-plugins/capture-menu.php 2>/dev/null; echo ok"
```
---
## Adaptar para sites especificos
### Sites multilingue (Polylang/WPML)
Descomentar seccao Idiomas no script. Adicionar:
```php
$menu['menu_item_sec_idiomas'] = section_header('Idiomas', 'dashicons-translation');
$menu[branda_id('mlang')] = native_item(); // Polylang
$menu[branda_id('loco')] = native_item(); // Loco Translate
```
### Sites WooCommerce
Adicionar seccao e-Commerce entre Marketing e Idiomas:
```php
$menu['menu_item_sec_ecommerce'] = section_header('e-Commerce', 'dashicons-cart');
$menu[branda_id('woocommerce')] = native_item();
// $menu[branda_id('wc-admin&path=/analytics/overview')] = native_item(); // Analytics WC
```
### Sites Care (KiviCare)
Adicionar seccao Clinica entre Marketing e Idiomas:
```php
$menu['menu_item_sec_clinica'] = section_header('Clinica', 'dashicons-heart');
$menu[branda_id('kivicare-...')] = native_item(); // Verificar slug exacto
```
### CPTs customizados
Adicionar na seccao Conteudo, antes de Artigos:
```php
$menu[branda_id('edit.php?post_type=SLUG_CPT')] = native_item();
```
### Itens desconhecidos
Se o menu nativo tiver itens que nao encaixam no mapeamento standard:
1. Perguntar ao utilizador onde colocar
2. Se plugin temporario/teste: adicionar ao Hidden
3. Se plugin permanente: criar seccao propria ou adicionar a seccao existente
---
## Troubleshooting
### Menu nao muda apos guardar
| Problema | Causa | Solucao |
|----------|-------|---------|
| Menu nao muda apos guardar | Cache ou modulo inactivo | `wp cache flush` + verificar `admin/menu.php` activo |
| Itens nativos fora das seccoes | Item nao incluido no config | Identificar slug, computar Branda ID, adicionar ao config |
| Separadores nativos aparecem | Slugs diferentes dos standard | Verificar slugs via captura, adicionar como hidden |
| Items custom em duplicado | Existe como custom e native | Remover custom link, manter native |
1. Limpar cache: `wp cache flush --allow-root`
2. Verificar modulo activo: `admin/menu.php` em `ultimatebranding_activated_modules`
3. Verificar role: config usa key `administrator` (nao `admin`)
### Itens nativos aparecem fora das seccoes
Causa: item nativo nao incluido no config (inserido na posicao default pelo parse_args_deep).
Fix: Identificar o slug do item, computar o Branda ID, adicionar ao config (visivel ou hidden).
### Separadores nativos aparecem
Causa: separadores com slugs diferentes dos standard (`separator1`, `separator2`, `separator-last`).
Fix: Verificar slugs via captura do menu nativo, adicionar como hidden.
### Menu items custom aparecem em duplicado
Causa: o mesmo item existe como custom link E como native item.
Fix: Remover o custom link, manter apenas o native item na posicao correcta.
### CSS para esconder separadores em falta
Adicionar ao CSS custom do Branda (ub_admin_css) como fallback:
**CSS fallback para separadores:**
```css
#adminmenu li.wp-menu-separator { display: none !important; }
```
---
## IDs de slugs comuns (referencia rapida)
| Slug | Branda ID |
|------|-----------|
| `index.php` | `menu_item_42ho017e7jo0` |
| `edit.php` | `menu_item_6lk5pbiakha0` |
| `upload.php` | `menu_item_1jkdde99dfd0` |
| `edit.php?post_type=page` | `menu_item_774p5endtlu0` |
| `themes.php` | `menu_item_7jgmlsspgv60` |
| `plugins.php` | `menu_item_5g2kqk93qi30` |
| `users.php` | `menu_item_gajld83c8es0` |
| `tools.php` | `menu_item_3t0no8pv5bfg` |
| `options-general.php` | `menu_item_d1a8rsor9700` |
| `edit-comments.php` | `menu_item_252pn6seih20` |
| `separator1` | `menu_item_3u7nva84d1i0` |
| `separator2` | `menu_item_6lm7mo14a4r0` |
| `separator-last` | `menu_item_74g99t5jejn0` |
| `elementor-home` | `menu_item_2kehh8g6nop0` |
| `elementor` | `menu_item_27qkhd7iqao0` |
| `edit.php?post_type=elementor_library` | `menu_item_3rubghs8krfg` |
| `hello-elementor` | `menu_item_3q7v6ask7gpg` |
| `fluentcrm-admin` | `menu_item_4a7t8bi9mt30` |
| `fluent_forms` | `menu_item_ebai6etubd00` |
| `rank-math` | `menu_item_148bl1t91os0` |
| `click-to-chat` | `menu_item_1b65lubbpnd8` |
| `Wordfence` | `menu_item_1077vi8mf9b0` |
| `complianz` | `menu_item_5etmjgu9lnk0` |
| `wpfastestcacheoptions` | `menu_item_4hqsn1kbum10` |
| `branding` | `menu_item_7qde2b2f7670` |
| `wpcode` | `menu_item_69igp9fj4tl0` |
| `loco` | `menu_item_2c34vb7r1csg` |
| `mlang` | `menu_item_24um676vv08g` |
| `woocommerce` | Computar: `branda_id('woocommerce')` |
| `edit.php?post_type=acf-field-group` | `menu_item_70ga2p32mc70` |
Para slugs nao listados, computar com:
```bash
wp eval 'echo "menu_item_" . substr(base_convert(md5("SLUG"), 16, 32), 0, 12);' --allow-root --path=/home/USER/SITE
```
---
## Checklist
- [ ] Branda activo e modulo `admin/menu.php` activo
@@ -569,4 +169,7 @@ wp eval 'echo "menu_item_" . substr(base_convert(md5("SLUG"), 16, 32), 0, 12);'
---
*Skill v1.0.0 | 26-02-2026 | Descomplicar*
## References
- `references/mapeamento-slugs.md` - Mapeamento completo slug -> seccao e tabela de Branda IDs
- `references/script-template.md` - Script PHP template + adaptacoes por tipo de site

View File

@@ -0,0 +1,100 @@
# Mapeamento de Slugs para Seccoes Branda
Referencia completa de mapeamento slug -> seccao e tabela de Branda IDs.
---
## Mapeamento Standard por Slug
```
# Admin
index.php -> Admin
users.php -> Admin
options-general.php -> Admin
plugins.php -> Admin
tools.php -> Admin
# Conteudo
edit.php -> Conteudo (Artigos)
edit.php?post_type=page -> Conteudo (Paginas)
upload.php -> Conteudo (Multimedia)
edit.php?post_type=acf-field-group -> Conteudo (ACF)
edit.php?post_type=* -> Conteudo (CPTs)
# Design
elementor-home -> Design (Elementor)
edit.php?post_type=elementor_library -> Design (Modelos)
jkit -> Design (Jeg Kit)
themes.php -> Design (Apresentacao)
# Marketing
fluentcrm-admin -> Marketing
fluent_forms -> Marketing
rank-math -> Marketing
click-to-chat -> Marketing
# Idiomas (se multilingue)
mlang -> Idiomas (Polylang)
loco -> Idiomas (Loco Translate)
# Performance
wpfastestcacheoptions -> Performance
# Seguranca
Wordfence -> Seguranca
complianz -> Seguranca
# WebMaster
branding -> WebMaster (Branda)
wpcode -> WebMaster (Code Snippets)
# Hidden
separator1, separator2, separator-last -> Hidden
edit-comments.php -> Hidden
hello-elementor -> Hidden
elementor -> Hidden (duplicado de elementor-home)
```
**Itens que nao encaixam no standard:** Perguntar ao utilizador em que seccao colocar. Exemplos: WooCommerce, KiviCare, FareHarbor.
---
## IDs de Slugs Comuns (referencia rapida)
| Slug | Branda ID |
|------|-----------|
| `index.php` | `menu_item_42ho017e7jo0` |
| `edit.php` | `menu_item_6lk5pbiakha0` |
| `upload.php` | `menu_item_1jkdde99dfd0` |
| `edit.php?post_type=page` | `menu_item_774p5endtlu0` |
| `themes.php` | `menu_item_7jgmlsspgv60` |
| `plugins.php` | `menu_item_5g2kqk93qi30` |
| `users.php` | `menu_item_gajld83c8es0` |
| `tools.php` | `menu_item_3t0no8pv5bfg` |
| `options-general.php` | `menu_item_d1a8rsor9700` |
| `edit-comments.php` | `menu_item_252pn6seih20` |
| `separator1` | `menu_item_3u7nva84d1i0` |
| `separator2` | `menu_item_6lm7mo14a4r0` |
| `separator-last` | `menu_item_74g99t5jejn0` |
| `elementor-home` | `menu_item_2kehh8g6nop0` |
| `elementor` | `menu_item_27qkhd7iqao0` |
| `edit.php?post_type=elementor_library` | `menu_item_3rubghs8krfg` |
| `hello-elementor` | `menu_item_3q7v6ask7gpg` |
| `fluentcrm-admin` | `menu_item_4a7t8bi9mt30` |
| `fluent_forms` | `menu_item_ebai6etubd00` |
| `rank-math` | `menu_item_148bl1t91os0` |
| `click-to-chat` | `menu_item_1b65lubbpnd8` |
| `Wordfence` | `menu_item_1077vi8mf9b0` |
| `complianz` | `menu_item_5etmjgu9lnk0` |
| `wpfastestcacheoptions` | `menu_item_4hqsn1kbum10` |
| `branding` | `menu_item_7qde2b2f7670` |
| `wpcode` | `menu_item_69igp9fj4tl0` |
| `loco` | `menu_item_2c34vb7r1csg` |
| `mlang` | `menu_item_24um676vv08g` |
| `woocommerce` | Computar: `branda_id('woocommerce')` |
| `edit.php?post_type=acf-field-group` | `menu_item_70ga2p32mc70` |
Para slugs nao listados, computar com:
```bash
wp eval 'echo "menu_item_" . substr(base_convert(md5("SLUG"), 16, 32), 0, 12);' --allow-root --path=/home/USER/SITE
```

View File

@@ -0,0 +1,174 @@
# Script Template Branda Menu Builder
Script PHP completo para construir e guardar menu Branda via WP-CLI.
---
## Template Base
```bash
mcp__ssh-unified__ssh_execute server:"server" command:"cat > /tmp/branda-menu-SITE.php << 'PHPEOF'
<?php
/**
* Branda menu builder for SITENAME
* Generated by /branda-menu skill
*/
function branda_id(\$slug) {
return 'menu_item_' . substr(base_convert(md5(\$slug), 16, 32), 0, 12);
}
function native_item(\$subs = array()) {
return array(
'title' => '', 'id_attribute' => '', 'css_classes' => '',
'icon_svg' => '', 'icon_url' => '', 'icon_image_id' => '',
'dashicon' => '', 'icon_type' => '', 'custom_url' => '',
'link_type' => '', 'link_target' => '', 'is_invisible' => '',
'is_hidden' => '', 'was_native' => 1, 'submenu' => \$subs
);
}
function hidden_item() {
\$item = native_item();
\$item['is_hidden'] = '1';
return \$item;
}
function section_header(\$title, \$dashicon) {
return array(
'icon_type' => 'dashicon', 'link_type' => 'none',
'submenu' => array(), 'title' => \$title,
'css_classes' => 'menu-highlight', 'dashicon' => \$dashicon
);
}
function custom_link(\$title, \$url, \$dashicon, \$target = '') {
return array(
'icon_type' => 'dashicon', 'link_type' => 'custom',
'submenu' => array(), 'title' => \$title,
'dashicon' => \$dashicon, 'link_target' => \$target,
'custom_url' => \$url
);
}
// === BUILD MENU ===
\$menu = array();
// 1. SUPORTE
\$menu['menu_item_sec_suporte'] = section_header('Suporte', 'dashicons-admin-tools');
\$menu['menu_item_desk_link'] = custom_link('Descomplicar', 'https://desk.descomplicar.pt/', 'dashicons-admin-comments', '_blank');
// 2. ADMIN
\$menu['menu_item_sec_admin'] = section_header('Admin', 'dashicons-admin-generic');
\$menu[branda_id('index.php')] = native_item();
\$menu[branda_id('users.php')] = native_item();
\$menu[branda_id('options-general.php')] = native_item();
\$menu[branda_id('plugins.php')] = native_item();
\$menu[branda_id('tools.php')] = native_item();
// 3. CONTEUDO
\$menu['menu_item_sec_conteudo'] = section_header('Conteudo', 'dashicons-admin-page');
\$menu[branda_id('edit.php?post_type=page')] = native_item();
// [INSERIR CPTs DO PROJECTO AQUI]
\$menu[branda_id('edit.php')] = native_item();
\$menu[branda_id('upload.php')] = native_item();
\$menu[branda_id('edit.php?post_type=acf-field-group')] = native_item();
// 4. DESIGN
\$menu['menu_item_sec_design'] = section_header('Design', 'dashicons-admin-appearance');
\$menu[branda_id('elementor-home')] = native_item();
\$menu[branda_id('edit.php?post_type=elementor_library')] = native_item();
// \$menu[branda_id('jkit')] = native_item(); // Se Jeg Kit activo
\$menu[branda_id('themes.php')] = native_item();
// 5. MARKETING
\$menu['menu_item_sec_marketing'] = section_header('Marketing', 'dashicons-megaphone');
\$menu[branda_id('fluentcrm-admin')] = native_item();
\$menu[branda_id('fluent_forms')] = native_item();
\$menu[branda_id('rank-math')] = native_item();
\$menu[branda_id('click-to-chat')] = native_item();
// 6. IDIOMAS (se multilingue)
// \$menu['menu_item_sec_idiomas'] = section_header('Idiomas', 'dashicons-translation');
// \$menu[branda_id('mlang')] = native_item();
// \$menu[branda_id('loco')] = native_item();
// 7. PERFORMANCE
\$menu['menu_item_sec_performance'] = section_header('Performance', 'dashicons-performance');
\$menu[branda_id('wpfastestcacheoptions')] = native_item();
// 8. SEGURANCA
\$menu['menu_item_sec_seguranca'] = section_header('Seguranca', 'dashicons-shield');
\$menu[branda_id('Wordfence')] = native_item();
\$menu[branda_id('complianz')] = native_item();
// 9. WEBMASTER
\$menu['menu_item_sec_webmaster'] = section_header('WebMaster', 'dashicons-admin-settings');
\$menu[branda_id('branding')] = native_item();
\$menu[branda_id('wpcode')] = native_item();
// HIDDEN
\$menu[branda_id('separator1')] = hidden_item();
\$menu[branda_id('separator2')] = hidden_item();
\$menu[branda_id('separator-last')] = hidden_item();
\$menu[branda_id('edit-comments.php')] = hidden_item();
\$menu[branda_id('hello-elementor')] = hidden_item();
\$menu[branda_id('elementor')] = hidden_item();
// SAVE
update_option('ub_custom_admin_menu', array('administrator' => \$menu));
wp_cache_flush();
\$visible = count(array_filter(\$menu, function(\$i) { return empty(\$i['is_hidden']); }));
\$hidden = count(\$menu) - \$visible;
echo "Menu guardado: \$visible visiveis + \$hidden hidden = " . count(\$menu) . " total\n";
PHPEOF
echo 'Script criado'
"
# Executar
mcp__ssh-unified__ssh_execute server:"server" command:"wp eval-file /tmp/branda-menu-SITE.php --allow-root --path=/home/USER/SITE"
```
---
## Adaptacoes por Tipo de Site
### Sites multilingue (Polylang/WPML)
Descomentar seccao Idiomas no script. Adicionar:
```php
$menu['menu_item_sec_idiomas'] = section_header('Idiomas', 'dashicons-translation');
$menu[branda_id('mlang')] = native_item(); // Polylang
$menu[branda_id('loco')] = native_item(); // Loco Translate
```
### Sites WooCommerce
Adicionar seccao e-Commerce entre Marketing e Idiomas:
```php
$menu['menu_item_sec_ecommerce'] = section_header('e-Commerce', 'dashicons-cart');
$menu[branda_id('woocommerce')] = native_item();
```
### Sites Care (KiviCare)
Adicionar seccao Clinica entre Marketing e Idiomas:
```php
$menu['menu_item_sec_clinica'] = section_header('Clinica', 'dashicons-heart');
$menu[branda_id('kivicare-...')] = native_item(); // Verificar slug exacto
```
### CPTs customizados
Adicionar na seccao Conteudo, antes de Artigos:
```php
$menu[branda_id('edit.php?post_type=SLUG_CPT')] = native_item();
```
### Itens desconhecidos
Se o menu nativo tiver itens que nao encaixam no mapeamento standard:
1. Perguntar ao utilizador onde colocar
2. Se plugin temporario/teste: adicionar ao Hidden
3. Se plugin permanente: criar seccao propria ou adicionar a seccao existente

View File

@@ -1,22 +1,6 @@
---
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"
description: Desenvolvimento com o ecossistema Crocoblock e todos os JetPlugins para Elementor. Cobre selecção, licenciamento, instalação, configuração e integração entre JetEngine, JetSmartFilters, JetWooBuilder, JetElements, JetPopup, JetFormBuilder e mais.
---
# /crocoblock — Ecossistema Crocoblock + JetPlugins

View File

@@ -1,22 +1,6 @@
---
name: elementor
description: >
Advanced development with Elementor Pro and Crocoblock ecosystem. Creates custom widgets, configures Theme Builder, develops with JetEngine, JetWooBuilder, optimizes performance and troubleshoots issues.
Also covers programmatic automation: deploy pipelines, kit import, replace-urls, flush-css, MySQL manipulation of _elementor_data, REST API endpoints, Dynamic Tags, CSS cache invalidation.
Use when building Elementor sites, creating custom widgets, configuring theme templates, developing with Crocoblock, or when user mentions
"elementor", "custom widget", "theme builder", "jetengine", "crocoblock", "jetwoobuilder", "page builder", "elementor pro",
"deploy elementor", "pipeline elementor", "elementor kit import", "elementor replace-urls", "elementor flush-css",
"automação elementor", "elementor programático", "elementor mysql", "rebranding elementor", "elementor rest api",
"elementor dynamic tag", "elementor cache", "elementor agente ia", "elementor wp-cli".
author: Descomplicar® Crescimento Digital
version: 1.2.0
user_invocable: true
tags: [wordpress, elementor, pagebuilder, crocoblock, jetengine, widgets, automation, wpcli]
desk_task: 1478
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"
description: Desenvolvimento avançado com Elementor Pro e ecossistema Crocoblock. Cria widgets custom, configura Theme Builder, automatiza deploys, manipula _elementor_data via MySQL, REST API, Dynamic Tags e cache CSS.
---
# /elementor - Elementor Development
@@ -31,6 +15,25 @@ Desenvolvimento avançado com Elementor Pro e Crocoblock.
- Optimizar performance Elementor
- Troubleshooting Elementor
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| WordPress e Elementor | 5be0d1a6 | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "5be0d1a6-00f2-4cd9-b835-978cb7721601",
query: "<adaptar ao contexto do pedido do utilizador>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
---
## Estrutura Custom Widget
```php

View File

@@ -1,23 +1,6 @@
---
name: jetengine
description: >
JetEngine development: Custom Post Types (CPT), Custom Content Types (CCT), Meta Boxes, Taxonomies,
Relations, Query Builder, Listing Grid, Listing Map, Dynamic Content, Dynamic Tags, Macros, Profile Builder,
REST API, and headless/programmatic automation for AI agents and n8n integration.
This skill should be used when the user asks about "jetengine", "jet engine", "custom post type jetengine",
"meta box jetengine", "relations jetengine", "query builder jetengine", "listing grid", "listing map",
"jetengine dynamic content", "jetengine macros", "profile builder jetengine", "cct jetengine",
"custom content type", "jetengine cct", "jetengine rest api", "jetengine n8n", "jetengine sql",
"jetengine automação", "jetengine headless", "wp_jet_rel_default", "wp_jet_cct", "jetengine relations",
"conteúdo dinâmico elementor jetengine", "jetengine filtros", "jetengine repeater".
author: Descomplicar® Crescimento Digital
version: 1.0.0
user_invocable: true
tags: [wordpress, elementor, crocoblock, jetengine, cpt, cct, listings, dynamic-content]
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: 85
updated: "2026-02-18T00:00:00Z"
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.
---
# /jetengine — JetEngine Development

View File

@@ -1,15 +1,6 @@
---
name: rank-math
description: This skill should be used when the user asks to "optimizar SEO wordpress",
"rank math wp-cli", "configurar rank math", "audit rank math", "update meta SEO",
"schema markup wordpress", "redirects rank math", "sitemap wordpress", "bulk SEO update",
"rank math CWP", "titles meta descriptions wp-cli", "configurar sitemap wordpress",
"noindex wordpress", "rank math robots". Manages Rank Math SEO plugin via WP-CLI
on CWP servers.
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 80
user_invocable: true
description: Gestão do plugin Rank Math SEO via WP-CLI em servidores CWP. Cobre auditoria SEO, configuração em massa de títulos e meta descriptions, schema markup, redirects e sitemaps.
---
# /rank-math - Gestão Rank Math SEO via WP-CLI
@@ -22,6 +13,31 @@ Operações de SEO WordPress via WP-CLI no servidor CWP (server.descomplicar.pt)
---
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| WordPress e Elementor | 5be0d1a6 | Sempre |
| Marketing Digital PT | 4c595973 | Para contexto SEO |
```
mcp__notebooklm__notebook_query({
notebook_id: "5be0d1a6-00f2-4cd9-b835-978cb7721601",
query: "<adaptar ao contexto do pedido do utilizador>"
})
mcp__notebooklm__notebook_query({
notebook_id: "4c595973-ba10-420a-a3bf-e4389e424ad3",
query: "<adaptar ao contexto SEO do pedido>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
---
## Uso
```

View File

@@ -1,18 +1,6 @@
---
name: woocommerce-cli
description: This skill should be used when the user asks to "gerir woocommerce linha de
comandos", "woocommerce wp-cli", "criar produto woocommerce cli", "actualizar stock
woocommerce cli", "gerir encomendas woocommerce cli", "importar produtos woocommerce",
"exportar produtos woocommerce", "configurar shipping woocommerce cli", "payment gateway
woocommerce cli", "limpar cache woocommerce cli", "bulk update woocommerce", "woocommerce
cwp", "wc cli cwp", "wp wc product", "wp wc shop_order", "configurar woocommerce servidor",
"scripting woocommerce", "automacao woocommerce cli". WooCommerce management via WP-CLI
on CWP server (server.descomplicar.pt) covering products, orders, customers, shipping,
payments, and automation.
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 80
user_invocable: true
description: Gestão WooCommerce via WP-CLI no servidor CWP. Cobre produtos, encomendas, clientes, shipping, gateways de pagamento, importação/exportação em massa e automação.
---
# /woocommerce-cli — WooCommerce via WP-CLI no CWP

View File

@@ -1,18 +1,6 @@
---
name: woocommerce
description: >
WooCommerce store development and optimization. Customizes checkout, integrates Portuguese payment gateways (Multibanco, MB Way, IfthenPay), develops custom features and optimizes performance.
Use when developing WooCommerce stores, customizing checkout, integrating payments, optimizing ecommerce performance, or when user mentions
"woocommerce", "checkout", "payment gateway", "multibanco", "mb way", "ifthen pay", "ecommerce", "online store", "shop optimization".
author: Descomplicar® Crescimento Digital
version: 1.1.0
user_invocable: true
tags: [wordpress, woocommerce, ecommerce, checkout, payments, multibanco]
desk_task: 1479
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: 75
updated: "2026-02-04T18:00:00Z"
description: Desenvolvimento e optimização de lojas WooCommerce. Personalização de checkout, integração de gateways de pagamento portugueses (Multibanco, MB Way, IfthenPay), funcionalidades custom e performance.
---
# /woocommerce - WooCommerce Development
@@ -27,6 +15,34 @@ Desenvolvimento e optimização de lojas WooCommerce.
- Desenvolver funcionalidades custom
- Optimizar performance
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| WordPress e Elementor | 5be0d1a6 | Sempre |
| E-commerce Prático | 226e384e | Para estratégia e-commerce |
```
mcp__notebooklm__notebook_query({
notebook_id: "5be0d1a6-00f2-4cd9-b835-978cb7721601",
query: "<adaptar ao contexto do pedido do utilizador>"
})
mcp__notebooklm__notebook_query({
notebook_id: "226e384e-d4bc-48f4-bb82-7927360436cc",
query: "<adaptar ao contexto e-commerce do pedido>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
### Procedimentos Relacionados
- `PROC-WiP-Starter-Template.md` — Template inicial para lojas WooCommerce
---
## Hooks WooCommerce Essenciais
### Actions

View File

@@ -1,16 +1,6 @@
---
name: wp-cli
description: This skill should be used when the user asks to "wp-cli cwp", "gerir
wordpress linha de comandos", "actualizar plugins wp-cli", "backup wordpress cli",
"migrar site wordpress", "search replace wordpress", "criar utilizador wordpress cli",
"wp-cli no servidor", "wp-cli allow-root", "comandos wordpress server",
"actualizar wordpress servidor", "modo manutencao wordpress", "wp db export",
"wp plugin update server", "wp core update cwp". WP-CLI management on CWP server
(server.descomplicar.pt) with multi-PHP support.
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 80
user_invocable: true
description: Gestão WordPress via WP-CLI no servidor CWP. Cobre core, plugins, temas, base de dados, utilizadores, migração, search-replace e automação com suporte multi-PHP.
---
# /wp-cli - Gestão WordPress via WP-CLI no CWP

View File

@@ -1,57 +1,6 @@
---
name: wp-dev
description: >
Desenvolvimento WordPress especializado com Quality Gate 70+. Cria/modifica plugins seguindo WordPress Coding Standards, desenvolve temas child, integra WooCommerce, resolve problemas WordPress. Consulta obrigatória de datasets Dify (Wordpress, Elementor, Crocoblock). Use when developing WordPress plugins, creating themes, integrating WooCommerce, solving WordPress issues, or when user mentions "wordpress", "plugin", "woocommerce", "elementor", "crocoblock", "jetengine".
author: Descomplicar® Crescimento Digital
version: 1.1.0
quality_score: 100
user_invocable: true
category: dev
tags: [wordpress, plugins, temas, woocommerce, elementor, crocoblock, development, quality-gate, wpcs]
desk_task: 1488
desk_project: 65
allowed-tools: Read, Write, Edit, Bash, mcp__dify-kb, mcp__memory-supabase, mcp__wikijs
mcps: dify-kb, memory-supabase, wikijs
datasets:
- id: 9da0b2b9-5051-4b99-b9f6-20bf35067092
name: Wordpress
priority: 1
- id: 9c77d3e2-4d88-4a43-abff-d4e681267cc7
name: Elementor
priority: 1
- id: 139cdf67-afce-46ec-9ccd-2a06040e5b9d
name: Crocooblock
priority: 1
- id: bdf85c26-1824-4021-92d1-be20501b35ac
name: Crocoblock
priority: 1
- id: 2e9b7c48-c630-457a-83a0-db8e77f76eae
name: Kivicare
priority: 2
- id: c8489151-de94-42b2-8cee-c0b961cfac6d
name: Desenvolvimento de WebSites
priority: 2
dependencies:
mcps: [dify-kb, memory-supabase]
triggers:
- "User mentions 'wordpress', 'plugin', 'wp'"
- "User asks to create/modify WordPress plugin"
- "User mentions 'woocommerce', 'elementor', 'jetengine'"
- "Developing WordPress themes or child themes"
quality_gate:
enabled: true
minimum_score: 70
checks:
- WordPress Coding Standards (WPCS)
- PHPDoc documentation
- Hooks and filters structure
- No PHP warnings/notices
- Security: nonces, sanitization, escaping
performance:
baseline_duration_ms: 14400000
target_duration_ms: 7200000
last_run_duration_ms: null
success_rate: 0.90
description: Desenvolvimento WordPress especializado com Quality Gate 70+. Cria e modifica plugins seguindo WordPress Coding Standards, desenvolve temas child, integra WooCommerce e resolve problemas WordPress.
---
# WordPress Plugin Developer
@@ -72,6 +21,34 @@ Skill para desenvolvimento WordPress profissional seguindo padrões Descomplicar
- Para operações servidor/SSH genéricas (usar agente especializado)
- Para manutenção rotineira WP (usar /today às segundas)
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| WordPress e Elementor | 5be0d1a6 | Sempre |
| WordPress Config CLI | fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d | Para WP-CLI e configuração |
```
mcp__notebooklm__notebook_query({
notebook_id: "5be0d1a6-00f2-4cd9-b835-978cb7721601",
query: "<adaptar ao contexto do pedido do utilizador>"
})
mcp__notebooklm__notebook_query({
notebook_id: "fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d",
query: "<adaptar ao contexto de WP-CLI e configuração WordPress>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
### Procedimentos Relacionados
- `PROC-WiP-Definicao.md` — Definição de projectos WordPress in a Package
- `PROC-WiP-Instalacao.md` — Instalação e configuração WiP
- `PROC-WiP-Gestao.md` — Gestão e manutenção WiP
---
## Protocolo Obrigatório
@@ -286,6 +263,35 @@ find /path -type f -exec chmod 644 {} \;
chmod 600 wp-config.php
```
### 5. Páginas com shortcodes React/Vite
Páginas que usam shortcodes para renderizar componentes React (ex: `[react-app]`, `[vite-app]`, `[app-root]`) **nunca devem ser editadas via editor wp-admin** (Gutenberg ou Classic). O editor pode:
- Adicionar `<p>` e `<br>` indesejados à volta do shortcode
- Remover atributos ou alterar aspas
- Quebrar a montagem do componente React no DOM
**Procedimento correcto:**
```bash
# Ver conteúdo actual da página
wp post get <ID> --field=content --ssh=<server>
# Editar conteúdo via WP-CLI
wp post update <ID> --post_content='[react-app id="main"]' --ssh=<server>
# Ou via SQL directo (quando WP-CLI não é suficiente)
UPDATE wp_posts SET post_content = '[react-app id="main"]' WHERE ID = <ID>;
```
**Identificar páginas afectadas:**
```bash
# Listar páginas com shortcodes React/Vite
wp post list --post_type=page --fields=ID,post_title,post_content --format=csv --ssh=<server> | grep -iE '\[(react|vite|app)'
```
**Regra:** Ao criar ou manter plugins que registam shortcodes para aplicações React/Vite, documentar no `readme.txt` do plugin que as páginas associadas devem ser editadas exclusivamente via WP-CLI ou BD.
## Datasets Dify (Consulta Obrigatória)
Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes datasets via MCP:
@@ -401,4 +407,4 @@ INSERT INTO tblskill_agent_metrics (
---
**Versão**: 1.1.0 | **Data**: 2026-02-03 | **Instrumentação**: Activa
**Versão**: 1.2.0 | **Data**: 2026-03-12 | **Instrumentação**: Activa

View File

@@ -0,0 +1,356 @@
---
name: wp-hardening
description: Aplicar hardening de seguranca standard a sites WordPress via SSH. Desactiva XML-RPC, file editing, directory listing, esconde versao WP, verifica permissoes e security headers.
---
# /wp-hardening - Hardening WordPress
Aplica medidas de hardening standard a sites WordPress no servidor CWP (176.9.3.158).
> **Nota:** Esta skill APLICA alteracoes. Para auditar sem alterar, usar `/security-check`.
## Contexto NotebookLM
ANTES de executar, consultar notebook para contexto:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| WordPress e Elementor | 5be0d1a6 | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "5be0d1a6-00f2-4cd9-b835-978cb7721601",
query: "wordpress security hardening best practices"
})
```
---
## Uso
```
/wp-hardening descomplicar.pt
/wp-hardening all # todos os 16 sites
/wp-hardening descomplicar.pt --dry # apenas verificar, sem aplicar
```
**Argumento:** dominio do site (ver tabela de sites em /wp-update) ou `all`.
**Flag `--dry`:** apenas verifica estado actual sem aplicar alteracoes.
---
## Sites WordPress no servidor
| Conta | Site | Path |
|-------|------|------|
| carstuff | carstuff.pt | /home/carstuff/public_html |
| ealmeida | descomplicar.pt | /home/ealmeida/public_html |
| ealmeida | emanuelalmeida.pt | /home/ealmeida/emanuelalmeida.pt |
| ealmeida | ecommerce.descomplicar.pt | /home/ealmeida/ecommerce.descomplicar.pt |
| ealmeida | ecommerce-demo.descomplicar.pt | /home/ealmeida/ecommerce-demo.descomplicar.pt |
| ealmeida | starter.descomplicar.pt | /home/ealmeida/starter.descomplicar.pt |
| ealmeida | care.descomplicar.pt | /home/ealmeida/care.descomplicar.pt |
| ealmeida | e-commerce.descomplicar.pt | /home/ealmeida/e-commerce.descomplicar.pt |
| espiral | espiralsenior.pt | /home/espiral/public_html |
| espiral | dev.espiralsenior.pt | /home/espiral/dev.espiralsenior.pt |
| familycl | familyclinic.pt | /home/familycl/public_html |
| ignition | ignitionvortex.pt | /home/ignition/public_html |
| karate | karateclubedegaia.com | /home/karate/karateclubedegaia.com |
| sintri | sintricare.com.pt | /home/sintri/public_html |
| solarfv | solarfvengenharia.com | /home/solarfv/public_html |
| wtc | watercontrol.pt | /home/wtc/public_html |
---
## Execucao
### Passo 0: Identificar site e path
Mapear o dominio fornecido para o path e conta do servidor usando a tabela acima.
```bash
SITE="dominio.pt"
WP_PATH="/home/USER/public_html"
WP_USER="user"
```
### Passo 1: Verificar estado actual (antes)
Executar via `mcp__ssh-unified__ssh_execute` no servidor `cwp`:
```bash
# 1. XML-RPC activo?
curl -s -o /dev/null -w "%{http_code}" -X POST "${SITE}/xmlrpc.php" -d '<?xml version="1.0"?><methodCall><methodName>system.listMethods</methodName></methodCall>'
# 2. DISALLOW_FILE_EDIT definido?
grep -c "DISALLOW_FILE_EDIT" ${WP_PATH}/wp-config.php
# 3. Permissoes directórios (esperado: 755)
find ${WP_PATH} -type d -not -perm 755 | head -10
# 4. Permissoes ficheiros (esperado: 644)
find ${WP_PATH} -type f -not -perm 644 -not -name "wp-config.php" | head -10
# 5. Versao WP exposta no HTML?
curl -s ${SITE} | grep -o 'content="WordPress [0-9.]*"' | head -1
# 6. Versao WP exposta no feed?
curl -s ${SITE}/feed/ | grep -o '<generator>.*</generator>' | head -1
# 7. Directory listing activo?
curl -s -o /dev/null -w "%{http_code}" ${SITE}/wp-content/uploads/
# 8. wp-config.php permissoes (esperado: 400 ou 440)
stat -c "%a" ${WP_PATH}/wp-config.php
# 9. .htaccess security headers?
grep -c "X-Frame-Options\|X-Content-Type-Options\|X-XSS-Protection\|Referrer-Policy\|Content-Security-Policy\|Strict-Transport-Security" ${WP_PATH}/.htaccess 2>/dev/null
# 10. debug.log exposto?
test -f ${WP_PATH}/wp-content/debug.log && echo "EXPOSTO" || echo "OK"
```
Registar cada resultado como ANTES.
### Passo 2: Aplicar hardening (se nao --dry)
> **Regra:** Fazer backup de cada ficheiro ANTES de alterar.
#### 2.1 Desactivar XML-RPC
```bash
# Backup .htaccess
cp ${WP_PATH}/.htaccess ${WP_PATH}/.htaccess.bak.$(date +%Y%m%d)
# Adicionar bloqueio XML-RPC ao .htaccess (antes de # BEGIN WordPress)
sed -i '/# BEGIN WordPress/i \
# BEGIN Block XML-RPC\
<Files xmlrpc.php>\
Require all denied\
</Files>\
# END Block XML-RPC\
' ${WP_PATH}/.htaccess
```
**Excepcao:** Se o site usa JetPack ou aplicacao mobile WP, NAO desactivar XML-RPC. Verificar primeiro:
```bash
sudo -u ${WP_USER} wp plugin list --status=active --path=${WP_PATH} | grep -i "jetpack"
```
#### 2.2 Desactivar file editing (DISALLOW_FILE_EDIT)
```bash
# Backup wp-config.php
cp ${WP_PATH}/wp-config.php ${WP_PATH}/wp-config.php.bak.$(date +%Y%m%d)
# Adicionar se nao existir
grep -q "DISALLOW_FILE_EDIT" ${WP_PATH}/wp-config.php || \
sed -i "/\/\* That's all, stop editing/i define('DISALLOW_FILE_EDIT', true);" ${WP_PATH}/wp-config.php
```
#### 2.3 Corrigir permissoes
```bash
# Directorios: 755
find ${WP_PATH} -type d -exec chmod 755 {} \;
# Ficheiros: 644
find ${WP_PATH} -type f -exec chmod 644 {} \;
# wp-config.php: 440 (leitura apenas para owner e grupo)
chmod 440 ${WP_PATH}/wp-config.php
# Corrigir ownership
chown -R ${WP_USER}:${WP_USER} ${WP_PATH}
```
#### 2.4 Esconder versao WordPress
```bash
# Adicionar ao functions.php do tema activo (via wp-cli)
THEME_PATH=$(sudo -u ${WP_USER} wp theme path --path=${WP_PATH})/$(sudo -u ${WP_USER} wp theme list --status=active --field=name --path=${WP_PATH})
# Verificar se ja tem o filtro
grep -q "remove_action.*wp_head.*wp_generator" ${THEME_PATH}/functions.php 2>/dev/null
if [ $? -ne 0 ]; then
# Alternativa robusta: usar mu-plugin (nao se perde em updates de tema)
mkdir -p ${WP_PATH}/wp-content/mu-plugins
cat > ${WP_PATH}/wp-content/mu-plugins/dsc-hardening.php << 'MUEOF'
<?php
/**
* Descomplicar - WordPress Hardening
* Esconde versao WP, desactiva XML-RPC via filtro, remove headers desnecessarios.
*/
// Esconder versao WP
remove_action('wp_head', 'wp_generator');
add_filter('the_generator', '__return_empty_string');
// Remover versao dos scripts e styles
function dsc_remove_version_scripts_styles($src) {
if (strpos($src, 'ver=')) {
$src = remove_query_arg('ver', $src);
}
return $src;
}
add_filter('style_loader_src', 'dsc_remove_version_scripts_styles', 9999);
add_filter('script_loader_src', 'dsc_remove_version_scripts_styles', 9999);
// Desactivar XML-RPC via filtro (complemento ao .htaccess)
add_filter('xmlrpc_enabled', '__return_false');
// Remover link do REST API do header (opcional, reduz surface)
remove_action('wp_head', 'rest_output_link_wp_head');
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'wp_shortlink_wp_head');
MUEOF
chown ${WP_USER}:${WP_USER} ${WP_PATH}/wp-content/mu-plugins/dsc-hardening.php
chmod 644 ${WP_PATH}/wp-content/mu-plugins/dsc-hardening.php
fi
```
#### 2.5 Desactivar directory listing
```bash
# Adicionar ao .htaccess se nao existir
grep -q "Options -Indexes" ${WP_PATH}/.htaccess || \
sed -i '1i Options -Indexes' ${WP_PATH}/.htaccess
```
#### 2.6 Security headers no .htaccess
```bash
# Verificar e adicionar headers em falta
if ! grep -q "X-Frame-Options" ${WP_PATH}/.htaccess; then
cat >> ${WP_PATH}/.htaccess << 'HTEOF'
# BEGIN Security Headers
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>
# END Security Headers
HTEOF
fi
```
#### 2.7 Proteger debug.log
```bash
# Se debug.log existe, bloquear acesso
if [ -f "${WP_PATH}/wp-content/debug.log" ]; then
cat >> ${WP_PATH}/wp-content/.htaccess << 'DLEOF'
<Files debug.log>
Require all denied
</Files>
DLEOF
fi
# Desactivar WP_DEBUG se estiver activo em producao
grep -q "define.*WP_DEBUG.*true" ${WP_PATH}/wp-config.php && \
sed -i "s/define.*'WP_DEBUG'.*true.*/define('WP_DEBUG', false);/" ${WP_PATH}/wp-config.php
```
### Passo 3: Verificar estado (depois)
Re-executar todos os testes do Passo 1 e registar como DEPOIS.
### Passo 4: Verificar site funcional
```bash
# Verificar que o site responde correctamente
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://${SITE})
echo "HTTP: ${HTTP_CODE}"
# Verificar conteudo por erros criticos
curl -s https://${SITE} | grep -i "critical error\|fatal error\|error establishing" | head -3
```
**Se o site reportar erro apos hardening:** reverter imediatamente usando os backups (.bak).
### Passo 5: Corrigir ownership final
```bash
chown -R ${WP_USER}:${WP_USER} ${WP_PATH}
```
---
## Output Template
```markdown
# WP Hardening Report - [site.pt]
**Data:** YYYY-MM-DD
**Modo:** Aplicado / Dry Run
---
## Checklist Hardening
| # | Item | Antes | Depois | Accao |
|---|------|-------|--------|-------|
| 1 | XML-RPC desactivado | / | / | .htaccess + mu-plugin |
| 2 | File editing desactivado | / | / | wp-config.php |
| 3 | Permissoes dirs (755) | / | / | chmod recursivo |
| 4 | Permissoes ficheiros (644) | / | / | chmod recursivo |
| 5 | Versao WP escondida | / | / | mu-plugin |
| 6 | Directory listing desactivado | / | / | .htaccess |
| 7 | Security headers | / | / | .htaccess |
| 8 | wp-config.php (440) | / | / | chmod |
| 9 | debug.log protegido | / | / | .htaccess |
| 10 | WP_DEBUG desactivado | / | / | wp-config.php |
---
## Ficheiros alterados
- `wp-config.php` (DISALLOW_FILE_EDIT, WP_DEBUG)
- `.htaccess` (XML-RPC, directory listing, security headers)
- `wp-content/mu-plugins/dsc-hardening.php` (criado)
## Backups criados
- `.htaccess.bak.YYYYMMDD`
- `wp-config.php.bak.YYYYMMDD`
## Verificacao pos-hardening
- HTTP: [200/301/etc]
- Erros criticos: [Nenhum / Lista]
---
*Gerado via /wp-hardening v1.0.0 - YYYY-MM-DD*
```
---
## Notas importantes
1. **Backups obrigatorios** antes de qualquer alteracao
2. **mu-plugin** preferido sobre functions.php (sobrevive a updates de tema)
3. **JetPack** requer XML-RPC — verificar SEMPRE antes de desactivar
4. **Content-Security-Policy** nao incluido como header standard porque varia por site. Adicionar manualmente se necessario
5. **Reverter:** os backups `.bak.YYYYMMDD` permitem rollback rapido
6. **Ownership:** SEMPRE `chown -R USER:USER` no final (regra #11)
---
## Changelog
### v1.0.0 (2026-03-12)
- Versao inicial
- 10 verificacoes de hardening
- Modo dry run (--dry)
- mu-plugin dsc-hardening.php para medidas PHP
- Security headers standard no .htaccess
- Backup automatico antes de alteracoes
- Verificacao pos-hardening com rollback
- Tarefa Desk CRM #443 (Projecto #65, Discussao #33)

View File

@@ -1,19 +1,32 @@
---
name: wp-performance
description: WordPress performance optimization. Analyzes and improves site speed,
caching, database, and assets. Use when user mentions "wordpress performance", "wp
speed", "optimize wordpress", "wordpress slow", "site performance".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 75
user_invocable: true
desk_task: 1489
description: Auditoria e optimização de performance WordPress. Analisa velocidade, caching, base de dados e assets. Usa Lighthouse, métricas Core Web Vitals e checklist sistemático.
---
# /wp-performance - Auditoria Performance WordPress
Checklist sistemático para auditar e optimizar performance de sites WordPress.
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| WordPress e Elementor | 5be0d1a6 | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "5be0d1a6-00f2-4cd9-b835-978cb7721601",
query: "<adaptar ao contexto do pedido do utilizador>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
### Procedimentos Relacionados
- `PROC-WordPress-Performance-Standard.md` — Standards de performance WP
---
## Uso

View File

@@ -1,17 +1,6 @@
---
name: wp-translate
description: >
Tradução WordPress PT-PT com DeepL Pro, glossário e scripts próprios. Use when translating WordPress plugins to PT-PT, fixing PT-BR translations, handling .po/.mo/.json files, working with Loco Translate, deploying translations to starter.descomplicar.pt, or when user mentions "tradução", "translate", "pt-pt", "pt-br", ".po", ".mo", "loco", "deepl wordpress".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 100
user_invocable: true
category: wordpress
tags: [wordpress, traducao, pt-pt, deepl, po, mo, gettext, loco-translate, i18n]
desk_task: 1580
desk_project: 65
allowed-tools: Read, Write, Edit, Bash, mcp__ssh-unified, mcp__deepl, mcp__memory-supabase
mcps: ssh-unified, deepl, memory-supabase
description: Tradução de plugins WordPress para PT-PT com DeepL Pro, glossário próprio e scripts de automação. Gere ficheiros .po/.mo/.json, corrige traduções PT-BR e faz deploy para starter.descomplicar.pt.
---
# /wp-translate — Traduções WordPress PT-PT

View File

@@ -1,13 +1,7 @@
---
name: wp-update
description: WordPress core, plugins, and themes update management. Safely updates
WordPress components with backups. Use when user mentions "wordpress update", "wp
update", "update plugins", "update themes", "wordpress maintenance".
author: Descomplicar® Crescimento Digital
version: 1.2.0
quality_score: 75
user_invocable: true
desk_task: 1553
description: Actualização segura de WordPress core, plugins e temas em todos os sites CWP. Inclui backups pré-actualização, verificação pós-actualização e relatório de estado.
disable-model-invocation: true
---
# /wp-update - Actualização WordPress