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:
@@ -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",
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
100
wordpress/skills/branda-menu/references/mapeamento-slugs.md
Normal file
100
wordpress/skills/branda-menu/references/mapeamento-slugs.md
Normal 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
|
||||
```
|
||||
174
wordpress/skills/branda-menu/references/script-template.md
Normal file
174
wordpress/skills/branda-menu/references/script-template.md
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
356
wordpress/skills/wp-hardening/SKILL.md
Normal file
356
wordpress/skills/wp-hardening/SKILL.md
Normal 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)
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user