aidevops 2.52.1 → 2.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/VERSION +1 -1
- package/aidevops.sh +15 -9
- package/package.json +4 -4
- package/scripts/npm-postinstall.js +6 -7
- package/setup.sh +1 -1
- package/templates/deploy-templates.sh +144 -0
- package/templates/home/.agent/README.md +33 -0
- package/templates/home/AGENTS.md +96 -0
- package/templates/home/git/.agent/README.md +48 -0
- package/templates/home/git/AGENTS.md +97 -0
- package/templates/standard-functions.sh +179 -0
- package/templates/wordpress-performance-workflow.md +217 -0
- package/.agent/AGENTS.md +0 -614
- package/.agent/accounts.md +0 -65
- package/.agent/aidevops/add-new-mcp-to-aidevops.md +0 -456
- package/.agent/aidevops/api-integrations.md +0 -335
- package/.agent/aidevops/architecture.md +0 -510
- package/.agent/aidevops/configs.md +0 -274
- package/.agent/aidevops/docs.md +0 -244
- package/.agent/aidevops/extension.md +0 -311
- package/.agent/aidevops/mcp-integrations.md +0 -340
- package/.agent/aidevops/mcp-troubleshooting.md +0 -162
- package/.agent/aidevops/memory-patterns.md +0 -172
- package/.agent/aidevops/providers.md +0 -217
- package/.agent/aidevops/recommendations.md +0 -321
- package/.agent/aidevops/requirements.md +0 -301
- package/.agent/aidevops/resources.md +0 -214
- package/.agent/aidevops/security-requirements.md +0 -174
- package/.agent/aidevops/security.md +0 -350
- package/.agent/aidevops/service-links.md +0 -400
- package/.agent/aidevops/services.md +0 -357
- package/.agent/aidevops/setup.md +0 -153
- package/.agent/aidevops/troubleshooting.md +0 -389
- package/.agent/aidevops.md +0 -124
- package/.agent/build-plus.md +0 -244
- package/.agent/content/guidelines.md +0 -109
- package/.agent/content.md +0 -87
- package/.agent/health.md +0 -59
- package/.agent/legal.md +0 -59
- package/.agent/loop-state/full-loop.local.md +0 -16
- package/.agent/loop-state/ralph-loop.local.md +0 -10
- package/.agent/marketing.md +0 -440
- package/.agent/memory/README.md +0 -260
- package/.agent/onboarding.md +0 -796
- package/.agent/plan-plus.md +0 -245
- package/.agent/research.md +0 -100
- package/.agent/sales.md +0 -333
- package/.agent/scripts/101domains-helper.sh +0 -701
- package/.agent/scripts/add-missing-returns.sh +0 -140
- package/.agent/scripts/agent-browser-helper.sh +0 -311
- package/.agent/scripts/agno-setup.sh +0 -712
- package/.agent/scripts/ahrefs-mcp-wrapper.js +0 -168
- package/.agent/scripts/aidevops-update-check.sh +0 -71
- package/.agent/scripts/ampcode-cli.sh +0 -522
- package/.agent/scripts/auto-version-bump.sh +0 -156
- package/.agent/scripts/autogen-helper.sh +0 -512
- package/.agent/scripts/beads-sync-helper.sh +0 -596
- package/.agent/scripts/closte-helper.sh +0 -5
- package/.agent/scripts/cloudron-helper.sh +0 -321
- package/.agent/scripts/codacy-cli-chunked.sh +0 -581
- package/.agent/scripts/codacy-cli.sh +0 -442
- package/.agent/scripts/code-audit-helper.sh +0 -5
- package/.agent/scripts/coderabbit-cli.sh +0 -417
- package/.agent/scripts/coderabbit-pro-analysis.sh +0 -238
- package/.agent/scripts/commands/code-simplifier.md +0 -86
- package/.agent/scripts/commands/full-loop.md +0 -246
- package/.agent/scripts/commands/postflight-loop.md +0 -103
- package/.agent/scripts/commands/recall.md +0 -182
- package/.agent/scripts/commands/remember.md +0 -132
- package/.agent/scripts/commands/save-todo.md +0 -175
- package/.agent/scripts/commands/session-review.md +0 -154
- package/.agent/scripts/comprehensive-quality-fix.sh +0 -106
- package/.agent/scripts/context-builder-helper.sh +0 -522
- package/.agent/scripts/coolify-cli-helper.sh +0 -674
- package/.agent/scripts/coolify-helper.sh +0 -380
- package/.agent/scripts/crawl4ai-examples.sh +0 -401
- package/.agent/scripts/crawl4ai-helper.sh +0 -1078
- package/.agent/scripts/crewai-helper.sh +0 -681
- package/.agent/scripts/dev-browser-helper.sh +0 -513
- package/.agent/scripts/dns-helper.sh +0 -396
- package/.agent/scripts/domain-research-helper.sh +0 -917
- package/.agent/scripts/dspy-helper.sh +0 -285
- package/.agent/scripts/dspyground-helper.sh +0 -291
- package/.agent/scripts/eeat-score-helper.sh +0 -1242
- package/.agent/scripts/efficient-return-fix.sh +0 -92
- package/.agent/scripts/extract-opencode-prompts.sh +0 -128
- package/.agent/scripts/find-missing-returns.sh +0 -113
- package/.agent/scripts/fix-auth-headers.sh +0 -104
- package/.agent/scripts/fix-common-strings.sh +0 -254
- package/.agent/scripts/fix-content-type.sh +0 -100
- package/.agent/scripts/fix-error-messages.sh +0 -130
- package/.agent/scripts/fix-misplaced-returns.sh +0 -74
- package/.agent/scripts/fix-remaining-literals.sh +0 -152
- package/.agent/scripts/fix-return-statements.sh +0 -41
- package/.agent/scripts/fix-s131-default-cases.sh +0 -249
- package/.agent/scripts/fix-sc2155-simple.sh +0 -102
- package/.agent/scripts/fix-shellcheck-critical.sh +0 -187
- package/.agent/scripts/fix-string-literals.sh +0 -273
- package/.agent/scripts/full-loop-helper.sh +0 -773
- package/.agent/scripts/generate-opencode-agents.sh +0 -497
- package/.agent/scripts/generate-opencode-commands.sh +0 -1629
- package/.agent/scripts/generate-skills.sh +0 -366
- package/.agent/scripts/git-platforms-helper.sh +0 -640
- package/.agent/scripts/gitea-cli-helper.sh +0 -743
- package/.agent/scripts/github-cli-helper.sh +0 -702
- package/.agent/scripts/gitlab-cli-helper.sh +0 -682
- package/.agent/scripts/gsc-add-user-helper.sh +0 -325
- package/.agent/scripts/gsc-sitemap-helper.sh +0 -678
- package/.agent/scripts/hetzner-helper.sh +0 -485
- package/.agent/scripts/hostinger-helper.sh +0 -229
- package/.agent/scripts/keyword-research-helper.sh +0 -1815
- package/.agent/scripts/langflow-helper.sh +0 -544
- package/.agent/scripts/linkedin-automation.py +0 -241
- package/.agent/scripts/linter-manager.sh +0 -599
- package/.agent/scripts/linters-local.sh +0 -434
- package/.agent/scripts/list-keys-helper.sh +0 -488
- package/.agent/scripts/local-browser-automation.py +0 -339
- package/.agent/scripts/localhost-helper.sh +0 -744
- package/.agent/scripts/loop-common.sh +0 -806
- package/.agent/scripts/mainwp-helper.sh +0 -728
- package/.agent/scripts/markdown-formatter.sh +0 -338
- package/.agent/scripts/markdown-lint-fix.sh +0 -311
- package/.agent/scripts/mass-fix-returns.sh +0 -58
- package/.agent/scripts/mcp-diagnose.sh +0 -167
- package/.agent/scripts/mcp-inspector-helper.sh +0 -449
- package/.agent/scripts/memory-helper.sh +0 -650
- package/.agent/scripts/monitor-code-review.sh +0 -255
- package/.agent/scripts/onboarding-helper.sh +0 -706
- package/.agent/scripts/opencode-github-setup-helper.sh +0 -797
- package/.agent/scripts/opencode-test-helper.sh +0 -213
- package/.agent/scripts/pagespeed-helper.sh +0 -464
- package/.agent/scripts/pandoc-helper.sh +0 -362
- package/.agent/scripts/postflight-check.sh +0 -555
- package/.agent/scripts/pre-commit-hook.sh +0 -259
- package/.agent/scripts/pre-edit-check.sh +0 -169
- package/.agent/scripts/qlty-cli.sh +0 -356
- package/.agent/scripts/quality-cli-manager.sh +0 -525
- package/.agent/scripts/quality-feedback-helper.sh +0 -462
- package/.agent/scripts/quality-fix.sh +0 -263
- package/.agent/scripts/quality-loop-helper.sh +0 -1108
- package/.agent/scripts/ralph-loop-helper.sh +0 -836
- package/.agent/scripts/ralph-upstream-check.sh +0 -341
- package/.agent/scripts/secretlint-helper.sh +0 -847
- package/.agent/scripts/servers-helper.sh +0 -241
- package/.agent/scripts/ses-helper.sh +0 -619
- package/.agent/scripts/session-review-helper.sh +0 -404
- package/.agent/scripts/setup-linters-wizard.sh +0 -379
- package/.agent/scripts/setup-local-api-keys.sh +0 -330
- package/.agent/scripts/setup-mcp-integrations.sh +0 -472
- package/.agent/scripts/shared-constants.sh +0 -246
- package/.agent/scripts/site-crawler-helper.sh +0 -1487
- package/.agent/scripts/snyk-helper.sh +0 -940
- package/.agent/scripts/sonarcloud-autofix.sh +0 -193
- package/.agent/scripts/sonarcloud-cli.sh +0 -191
- package/.agent/scripts/sonarscanner-cli.sh +0 -455
- package/.agent/scripts/spaceship-helper.sh +0 -747
- package/.agent/scripts/stagehand-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-setup.sh +0 -441
- package/.agent/scripts/stagehand-setup.sh +0 -439
- package/.agent/scripts/system-cleanup.sh +0 -340
- package/.agent/scripts/terminal-title-helper.sh +0 -388
- package/.agent/scripts/terminal-title-setup.sh +0 -549
- package/.agent/scripts/test-stagehand-both-integration.sh +0 -317
- package/.agent/scripts/test-stagehand-integration.sh +0 -309
- package/.agent/scripts/test-stagehand-python-integration.sh +0 -341
- package/.agent/scripts/todo-ready.sh +0 -263
- package/.agent/scripts/tool-version-check.sh +0 -362
- package/.agent/scripts/toon-helper.sh +0 -469
- package/.agent/scripts/twilio-helper.sh +0 -917
- package/.agent/scripts/updown-helper.sh +0 -279
- package/.agent/scripts/validate-mcp-integrations.sh +0 -250
- package/.agent/scripts/validate-version-consistency.sh +0 -131
- package/.agent/scripts/vaultwarden-helper.sh +0 -597
- package/.agent/scripts/vercel-cli-helper.sh +0 -816
- package/.agent/scripts/verify-mirrors.sh +0 -169
- package/.agent/scripts/version-manager.sh +0 -831
- package/.agent/scripts/webhosting-helper.sh +0 -471
- package/.agent/scripts/webhosting-verify.sh +0 -238
- package/.agent/scripts/wordpress-mcp-helper.sh +0 -508
- package/.agent/scripts/worktree-helper.sh +0 -595
- package/.agent/scripts/worktree-sessions.sh +0 -577
- package/.agent/seo/dataforseo.md +0 -215
- package/.agent/seo/domain-research.md +0 -532
- package/.agent/seo/eeat-score.md +0 -659
- package/.agent/seo/google-search-console.md +0 -366
- package/.agent/seo/gsc-sitemaps.md +0 -282
- package/.agent/seo/keyword-research.md +0 -521
- package/.agent/seo/serper.md +0 -278
- package/.agent/seo/site-crawler.md +0 -387
- package/.agent/seo.md +0 -236
- package/.agent/services/accounting/quickfile.md +0 -159
- package/.agent/services/communications/telfon.md +0 -470
- package/.agent/services/communications/twilio.md +0 -569
- package/.agent/services/crm/fluentcrm.md +0 -449
- package/.agent/services/email/ses.md +0 -399
- package/.agent/services/hosting/101domains.md +0 -378
- package/.agent/services/hosting/closte.md +0 -177
- package/.agent/services/hosting/cloudflare.md +0 -251
- package/.agent/services/hosting/cloudron.md +0 -478
- package/.agent/services/hosting/dns-providers.md +0 -335
- package/.agent/services/hosting/domain-purchasing.md +0 -344
- package/.agent/services/hosting/hetzner.md +0 -327
- package/.agent/services/hosting/hostinger.md +0 -287
- package/.agent/services/hosting/localhost.md +0 -419
- package/.agent/services/hosting/spaceship.md +0 -353
- package/.agent/services/hosting/webhosting.md +0 -330
- package/.agent/social-media.md +0 -69
- package/.agent/templates/plans-template.md +0 -114
- package/.agent/templates/prd-template.md +0 -129
- package/.agent/templates/tasks-template.md +0 -108
- package/.agent/templates/todo-template.md +0 -89
- package/.agent/tools/ai-assistants/agno.md +0 -471
- package/.agent/tools/ai-assistants/capsolver.md +0 -326
- package/.agent/tools/ai-assistants/configuration.md +0 -221
- package/.agent/tools/ai-assistants/overview.md +0 -209
- package/.agent/tools/ai-assistants/status.md +0 -171
- package/.agent/tools/ai-assistants/windsurf.md +0 -193
- package/.agent/tools/ai-orchestration/autogen.md +0 -406
- package/.agent/tools/ai-orchestration/crewai.md +0 -445
- package/.agent/tools/ai-orchestration/langflow.md +0 -405
- package/.agent/tools/ai-orchestration/openprose.md +0 -487
- package/.agent/tools/ai-orchestration/overview.md +0 -362
- package/.agent/tools/ai-orchestration/packaging.md +0 -647
- package/.agent/tools/browser/agent-browser.md +0 -464
- package/.agent/tools/browser/browser-automation.md +0 -400
- package/.agent/tools/browser/chrome-devtools.md +0 -282
- package/.agent/tools/browser/crawl4ai-integration.md +0 -422
- package/.agent/tools/browser/crawl4ai-resources.md +0 -277
- package/.agent/tools/browser/crawl4ai-usage.md +0 -416
- package/.agent/tools/browser/crawl4ai.md +0 -585
- package/.agent/tools/browser/dev-browser.md +0 -341
- package/.agent/tools/browser/pagespeed.md +0 -260
- package/.agent/tools/browser/playwright.md +0 -266
- package/.agent/tools/browser/playwriter.md +0 -310
- package/.agent/tools/browser/stagehand-examples.md +0 -456
- package/.agent/tools/browser/stagehand-python.md +0 -483
- package/.agent/tools/browser/stagehand.md +0 -421
- package/.agent/tools/build-agent/agent-review.md +0 -224
- package/.agent/tools/build-agent/build-agent.md +0 -784
- package/.agent/tools/build-mcp/aidevops-plugin.md +0 -476
- package/.agent/tools/build-mcp/api-wrapper.md +0 -445
- package/.agent/tools/build-mcp/build-mcp.md +0 -240
- package/.agent/tools/build-mcp/deployment.md +0 -401
- package/.agent/tools/build-mcp/server-patterns.md +0 -632
- package/.agent/tools/build-mcp/transports.md +0 -366
- package/.agent/tools/code-review/auditing.md +0 -383
- package/.agent/tools/code-review/automation.md +0 -219
- package/.agent/tools/code-review/best-practices.md +0 -203
- package/.agent/tools/code-review/codacy.md +0 -151
- package/.agent/tools/code-review/code-simplifier.md +0 -174
- package/.agent/tools/code-review/code-standards.md +0 -309
- package/.agent/tools/code-review/coderabbit.md +0 -101
- package/.agent/tools/code-review/management.md +0 -155
- package/.agent/tools/code-review/qlty.md +0 -248
- package/.agent/tools/code-review/secretlint.md +0 -565
- package/.agent/tools/code-review/setup.md +0 -250
- package/.agent/tools/code-review/snyk.md +0 -563
- package/.agent/tools/code-review/tools.md +0 -230
- package/.agent/tools/content/summarize.md +0 -353
- package/.agent/tools/context/augment-context-engine.md +0 -468
- package/.agent/tools/context/context-builder-agent.md +0 -76
- package/.agent/tools/context/context-builder.md +0 -375
- package/.agent/tools/context/context7.md +0 -371
- package/.agent/tools/context/dspy.md +0 -302
- package/.agent/tools/context/dspyground.md +0 -374
- package/.agent/tools/context/llm-tldr.md +0 -219
- package/.agent/tools/context/osgrep.md +0 -488
- package/.agent/tools/context/prompt-optimization.md +0 -338
- package/.agent/tools/context/toon.md +0 -292
- package/.agent/tools/conversion/pandoc.md +0 -304
- package/.agent/tools/credentials/api-key-management.md +0 -154
- package/.agent/tools/credentials/api-key-setup.md +0 -224
- package/.agent/tools/credentials/environment-variables.md +0 -180
- package/.agent/tools/credentials/vaultwarden.md +0 -382
- package/.agent/tools/data-extraction/outscraper.md +0 -974
- package/.agent/tools/deployment/coolify-cli.md +0 -388
- package/.agent/tools/deployment/coolify-setup.md +0 -353
- package/.agent/tools/deployment/coolify.md +0 -345
- package/.agent/tools/deployment/vercel.md +0 -390
- package/.agent/tools/git/authentication.md +0 -132
- package/.agent/tools/git/gitea-cli.md +0 -193
- package/.agent/tools/git/github-actions.md +0 -207
- package/.agent/tools/git/github-cli.md +0 -223
- package/.agent/tools/git/gitlab-cli.md +0 -190
- package/.agent/tools/git/opencode-github-security.md +0 -350
- package/.agent/tools/git/opencode-github.md +0 -328
- package/.agent/tools/git/opencode-gitlab.md +0 -252
- package/.agent/tools/git/security.md +0 -196
- package/.agent/tools/git.md +0 -207
- package/.agent/tools/opencode/oh-my-opencode.md +0 -375
- package/.agent/tools/opencode/opencode-anthropic-auth.md +0 -446
- package/.agent/tools/opencode/opencode.md +0 -651
- package/.agent/tools/social-media/bird.md +0 -437
- package/.agent/tools/task-management/beads.md +0 -336
- package/.agent/tools/terminal/terminal-title.md +0 -251
- package/.agent/tools/ui/shadcn.md +0 -196
- package/.agent/tools/ui/ui-skills.md +0 -115
- package/.agent/tools/wordpress/localwp.md +0 -311
- package/.agent/tools/wordpress/mainwp.md +0 -391
- package/.agent/tools/wordpress/scf.md +0 -527
- package/.agent/tools/wordpress/wp-admin.md +0 -729
- package/.agent/tools/wordpress/wp-dev.md +0 -940
- package/.agent/tools/wordpress/wp-preferred.md +0 -398
- package/.agent/tools/wordpress.md +0 -95
- package/.agent/workflows/branch/bugfix.md +0 -63
- package/.agent/workflows/branch/chore.md +0 -95
- package/.agent/workflows/branch/experiment.md +0 -115
- package/.agent/workflows/branch/feature.md +0 -59
- package/.agent/workflows/branch/hotfix.md +0 -98
- package/.agent/workflows/branch/refactor.md +0 -92
- package/.agent/workflows/branch/release.md +0 -96
- package/.agent/workflows/branch.md +0 -347
- package/.agent/workflows/bug-fixing.md +0 -267
- package/.agent/workflows/changelog.md +0 -129
- package/.agent/workflows/code-audit-remote.md +0 -279
- package/.agent/workflows/conversation-starter.md +0 -69
- package/.agent/workflows/error-feedback.md +0 -578
- package/.agent/workflows/feature-development.md +0 -355
- package/.agent/workflows/git-workflow.md +0 -702
- package/.agent/workflows/multi-repo-workspace.md +0 -268
- package/.agent/workflows/plans.md +0 -709
- package/.agent/workflows/postflight.md +0 -604
- package/.agent/workflows/pr.md +0 -571
- package/.agent/workflows/preflight.md +0 -278
- package/.agent/workflows/ralph-loop.md +0 -773
- package/.agent/workflows/release.md +0 -498
- package/.agent/workflows/session-manager.md +0 -254
- package/.agent/workflows/session-review.md +0 -311
- package/.agent/workflows/sql-migrations.md +0 -631
- package/.agent/workflows/version-bump.md +0 -283
- package/.agent/workflows/wiki-update.md +0 -333
- package/.agent/workflows/worktree.md +0 -477
|
@@ -1,940 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: WordPress development & debugging - theme/plugin dev, testing, MCP Adapter, error diagnosis
|
|
3
|
-
mode: subagent
|
|
4
|
-
temperature: 0.2
|
|
5
|
-
tools:
|
|
6
|
-
write: true
|
|
7
|
-
edit: true
|
|
8
|
-
bash: true
|
|
9
|
-
read: true
|
|
10
|
-
glob: true
|
|
11
|
-
grep: true
|
|
12
|
-
webfetch: true
|
|
13
|
-
task: true
|
|
14
|
-
wordpress-mcp_*: true
|
|
15
|
-
context7_*: true
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# WordPress Development & Debugging Subagent
|
|
19
|
-
|
|
20
|
-
<!-- AI-CONTEXT-START -->
|
|
21
|
-
## Quick Reference
|
|
22
|
-
|
|
23
|
-
- **Plugin/Theme Dev**: `~/Git/wordpress/{slug}` for analysis, `{slug}-fix` for patches
|
|
24
|
-
- **MCP Adapter Repo**: `~/Git/wordpress/mcp-adapter`
|
|
25
|
-
- **Local Sites**: `~/Local Sites/`
|
|
26
|
-
- **Sites Config**: `~/.config/aidevops/wordpress-sites.json`
|
|
27
|
-
- **Working Dir**: `~/.aidevops/.agent-workspace/work/wordpress/`
|
|
28
|
-
- **Preferred Plugins**: See `wp-preferred.md` for curated recommendations
|
|
29
|
-
|
|
30
|
-
**Plugin/Theme Workflow**:
|
|
31
|
-
- Clone to `~/Git/wordpress/{slug}/` for analysis
|
|
32
|
-
- Fork + PR for open-source contributions
|
|
33
|
-
- Create `{slug}-fix/` or `{slug}-addon/` for pro plugin patches (survives updates)
|
|
34
|
-
|
|
35
|
-
**Dependency Checks** (run first):
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
php -v # >= 7.4
|
|
39
|
-
composer -V # Package manager
|
|
40
|
-
wp --version # WP-CLI
|
|
41
|
-
node -v # >= 18 (for HTTP transport, wp-env, Playground)
|
|
42
|
-
```text
|
|
43
|
-
|
|
44
|
-
**WordPress MCP Adapter**:
|
|
45
|
-
- STDIO: `wp mcp-adapter serve --server=mcp-adapter-default-server --user=admin`
|
|
46
|
-
- HTTP: `npx @automattic/mcp-wordpress-remote`
|
|
47
|
-
- Requires: WordPress Abilities API plugin
|
|
48
|
-
|
|
49
|
-
**Testing Environments**:
|
|
50
|
-
|
|
51
|
-
| Environment | Best For | Command |
|
|
52
|
-
|-------------|----------|---------|
|
|
53
|
-
| WordPress Playground | Quick testing | `npx @wp-playground/cli server` |
|
|
54
|
-
| LocalWP | Full development | Open Local.app |
|
|
55
|
-
| wp-env | CI/CD, PHPUnit | `wp-env start` |
|
|
56
|
-
|
|
57
|
-
**Related Subagents**:
|
|
58
|
-
- `@localwp` - Database inspection during debugging
|
|
59
|
-
- `@wp-admin` - Content/maintenance tasks (hand off)
|
|
60
|
-
- `@browser-automation` - E2E testing with Playwright
|
|
61
|
-
- `@code-standards` - PHP/JS code quality checks
|
|
62
|
-
|
|
63
|
-
**Related Workflows** (in .agent/workflows/):
|
|
64
|
-
- `bug-fixing.md` - Systematic debugging approach
|
|
65
|
-
- `code-review.md` - Code review checklist
|
|
66
|
-
- `git-workflow.md` - Branching for features/fixes
|
|
67
|
-
- `release-process.md` - Plugin/theme releases
|
|
68
|
-
- `error-checking-feedback-loops.md` - CI/CD error resolution
|
|
69
|
-
|
|
70
|
-
**Always use Context7** for latest WordPress/WP-CLI/PHP documentation.
|
|
71
|
-
<!-- AI-CONTEXT-END -->
|
|
72
|
-
|
|
73
|
-
## Overview
|
|
74
|
-
|
|
75
|
-
This subagent handles WordPress development and debugging tasks:
|
|
76
|
-
|
|
77
|
-
- Theme and plugin development
|
|
78
|
-
- Code debugging and error diagnosis
|
|
79
|
-
- Testing environments (Playground, LocalWP, wp-env)
|
|
80
|
-
- WordPress MCP Adapter integration
|
|
81
|
-
- WP-CLI development commands
|
|
82
|
-
|
|
83
|
-
## Dependency Verification
|
|
84
|
-
|
|
85
|
-
### Required Dependencies
|
|
86
|
-
|
|
87
|
-
Before starting WordPress development, verify these are installed:
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
# PHP 7.4+ (8.2 recommended)
|
|
91
|
-
php -v
|
|
92
|
-
|
|
93
|
-
# Composer (package manager)
|
|
94
|
-
composer -V
|
|
95
|
-
|
|
96
|
-
# WP-CLI
|
|
97
|
-
wp --version
|
|
98
|
-
|
|
99
|
-
# Node.js 18+ (for Playground, wp-env, HTTP transport)
|
|
100
|
-
node -v
|
|
101
|
-
```text
|
|
102
|
-
|
|
103
|
-
### Installation (macOS)
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
# PHP
|
|
107
|
-
brew install php@8.2
|
|
108
|
-
|
|
109
|
-
# Composer
|
|
110
|
-
brew install composer
|
|
111
|
-
|
|
112
|
-
# WP-CLI
|
|
113
|
-
brew install wp-cli
|
|
114
|
-
|
|
115
|
-
# Node.js
|
|
116
|
-
brew install node
|
|
117
|
-
```text
|
|
118
|
-
|
|
119
|
-
## WordPress MCP Adapter
|
|
120
|
-
|
|
121
|
-
The official WordPress MCP Adapter enables AI interaction with WordPress sites.
|
|
122
|
-
|
|
123
|
-
### Repository Location
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
# Clone location (already cloned)
|
|
127
|
-
~/git/wordpress/mcp-adapter
|
|
128
|
-
|
|
129
|
-
# Update to latest
|
|
130
|
-
cd ~/git/wordpress/mcp-adapter && git pull
|
|
131
|
-
```text
|
|
132
|
-
|
|
133
|
-
### STDIO Transport (Local Development)
|
|
134
|
-
|
|
135
|
-
For local WordPress sites with WP-CLI access:
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
# Install on WordPress site
|
|
139
|
-
cd /path/to/wordpress
|
|
140
|
-
composer require wordpress/mcp-adapter
|
|
141
|
-
|
|
142
|
-
# Activate plugin
|
|
143
|
-
wp plugin activate mcp-adapter
|
|
144
|
-
|
|
145
|
-
# Start MCP server
|
|
146
|
-
wp mcp-adapter serve --server=mcp-adapter-default-server --user=admin
|
|
147
|
-
```text
|
|
148
|
-
|
|
149
|
-
### HTTP Transport (Remote Sites)
|
|
150
|
-
|
|
151
|
-
For remote WordPress sites without SSH:
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# Requires Node.js
|
|
155
|
-
npx @automattic/mcp-wordpress-remote
|
|
156
|
-
|
|
157
|
-
# Environment variables needed
|
|
158
|
-
export WP_API_URL="https://your-site.com/wp-json/mcp/mcp-adapter-default-server"
|
|
159
|
-
export WP_API_USERNAME="your-username"
|
|
160
|
-
export WP_API_PASSWORD="your-application-password"
|
|
161
|
-
```text
|
|
162
|
-
|
|
163
|
-
### Application Passwords
|
|
164
|
-
|
|
165
|
-
For HTTP transport, create an Application Password:
|
|
166
|
-
|
|
167
|
-
1. WordPress Admin → Users → Your Profile
|
|
168
|
-
2. Scroll to "Application Passwords"
|
|
169
|
-
3. Enter name: `mcp-adapter-dev`
|
|
170
|
-
4. Click "Add New Application Password"
|
|
171
|
-
5. Store securely:
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
setup-local-api-keys.sh set wp-app-password-sitename "xxxx xxxx xxxx xxxx"
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## Testing Environments
|
|
178
|
-
|
|
179
|
-
### WordPress Playground (Quick Testing)
|
|
180
|
-
|
|
181
|
-
Instant browser-based WordPress for quick tests:
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
# Install CLI
|
|
185
|
-
npm install -g @wp-playground/cli
|
|
186
|
-
|
|
187
|
-
# Start with blueprint
|
|
188
|
-
npx @wp-playground/cli server --port=8888 --blueprint=blueprint.json
|
|
189
|
-
```text
|
|
190
|
-
|
|
191
|
-
**Blueprint Example** (`blueprint.json`):
|
|
192
|
-
|
|
193
|
-
```json
|
|
194
|
-
{
|
|
195
|
-
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
|
|
196
|
-
"landingPage": "/wp-admin/",
|
|
197
|
-
"login": true,
|
|
198
|
-
"features": { "networking": true },
|
|
199
|
-
"phpExtensionBundles": ["kitchen-sink"],
|
|
200
|
-
"steps": [
|
|
201
|
-
{
|
|
202
|
-
"step": "defineWpConfigConsts",
|
|
203
|
-
"consts": {
|
|
204
|
-
"WP_DEBUG": true,
|
|
205
|
-
"WP_DEBUG_LOG": true,
|
|
206
|
-
"WP_DEBUG_DISPLAY": false,
|
|
207
|
-
"SCRIPT_DEBUG": true
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
"step": "installPlugin",
|
|
212
|
-
"pluginZipFile": {
|
|
213
|
-
"resource": "url",
|
|
214
|
-
"url": "https://downloads.wordpress.org/plugin/query-monitor.latest-stable.zip"
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
]
|
|
218
|
-
}
|
|
219
|
-
```text
|
|
220
|
-
|
|
221
|
-
**Multisite Blueprint**:
|
|
222
|
-
|
|
223
|
-
```json
|
|
224
|
-
{
|
|
225
|
-
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
|
|
226
|
-
"landingPage": "/wp-admin/network/",
|
|
227
|
-
"login": true,
|
|
228
|
-
"steps": [
|
|
229
|
-
{ "step": "enableMultisite" },
|
|
230
|
-
{
|
|
231
|
-
"step": "installPlugin",
|
|
232
|
-
"pluginZipFile": { "resource": "directory", "path": "." },
|
|
233
|
-
"options": { "activate": true, "networkActivate": true }
|
|
234
|
-
}
|
|
235
|
-
]
|
|
236
|
-
}
|
|
237
|
-
```text
|
|
238
|
-
|
|
239
|
-
### LocalWP (Full Development)
|
|
240
|
-
|
|
241
|
-
Full persistent development environment:
|
|
242
|
-
|
|
243
|
-
```bash
|
|
244
|
-
# Default sites location
|
|
245
|
-
~/Local Sites/
|
|
246
|
-
|
|
247
|
-
# WP-CLI with LocalWP
|
|
248
|
-
cd "~/Local Sites/site-name/app/public"
|
|
249
|
-
wp plugin list
|
|
250
|
-
wp option get siteurl
|
|
251
|
-
|
|
252
|
-
# LocalWP's WP-CLI path
|
|
253
|
-
/Applications/Local.app/Contents/Resources/extraResources/bin/wp-cli.phar
|
|
254
|
-
```text
|
|
255
|
-
|
|
256
|
-
**Plugin Sync Script** (`bin/localwp-sync.sh`):
|
|
257
|
-
|
|
258
|
-
```bash
|
|
259
|
-
#!/bin/bash
|
|
260
|
-
PLUGIN_SLUG="your-plugin-slug"
|
|
261
|
-
SITE_NAME="project-name"
|
|
262
|
-
PLUGIN_DIR="$HOME/Local Sites/$SITE_NAME/app/public/wp-content/plugins/$PLUGIN_SLUG"
|
|
263
|
-
|
|
264
|
-
rsync -av --delete \
|
|
265
|
-
--exclude='node_modules' \
|
|
266
|
-
--exclude='vendor' \
|
|
267
|
-
--exclude='tests' \
|
|
268
|
-
--exclude='.git' \
|
|
269
|
-
./ "$PLUGIN_DIR/"
|
|
270
|
-
|
|
271
|
-
echo "Plugin synced to LocalWP"
|
|
272
|
-
```text
|
|
273
|
-
|
|
274
|
-
### wp-env (Docker/CI)
|
|
275
|
-
|
|
276
|
-
Docker-based environment for testing:
|
|
277
|
-
|
|
278
|
-
```bash
|
|
279
|
-
# Install
|
|
280
|
-
npm install -g @wordpress/env
|
|
281
|
-
|
|
282
|
-
# Start
|
|
283
|
-
wp-env start
|
|
284
|
-
|
|
285
|
-
# Stop
|
|
286
|
-
wp-env stop
|
|
287
|
-
|
|
288
|
-
# Run WP-CLI
|
|
289
|
-
wp-env run cli wp plugin list
|
|
290
|
-
|
|
291
|
-
# Run tests
|
|
292
|
-
wp-env run tests-cli phpunit
|
|
293
|
-
```text
|
|
294
|
-
|
|
295
|
-
**Configuration** (`.wp-env.json`):
|
|
296
|
-
|
|
297
|
-
```json
|
|
298
|
-
{
|
|
299
|
-
"core": "WordPress/WordPress#6.4",
|
|
300
|
-
"phpVersion": "8.1",
|
|
301
|
-
"plugins": [".", "https://downloads.wordpress.org/plugin/query-monitor.latest-stable.zip"],
|
|
302
|
-
"config": {
|
|
303
|
-
"WP_DEBUG": true,
|
|
304
|
-
"WP_DEBUG_LOG": true,
|
|
305
|
-
"SCRIPT_DEBUG": true
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
```text
|
|
309
|
-
|
|
310
|
-
**Multisite** (`.wp-env.json`):
|
|
311
|
-
|
|
312
|
-
```json
|
|
313
|
-
{
|
|
314
|
-
"core": "WordPress/WordPress#6.4",
|
|
315
|
-
"phpVersion": "8.1",
|
|
316
|
-
"plugins": ["."],
|
|
317
|
-
"config": {
|
|
318
|
-
"WP_DEBUG": true,
|
|
319
|
-
"WP_ALLOW_MULTISITE": true,
|
|
320
|
-
"MULTISITE": true,
|
|
321
|
-
"SUBDOMAIN_INSTALL": false,
|
|
322
|
-
"DOMAIN_CURRENT_SITE": "localhost",
|
|
323
|
-
"PATH_CURRENT_SITE": "/",
|
|
324
|
-
"SITE_ID_CURRENT_SITE": 1,
|
|
325
|
-
"BLOG_ID_CURRENT_SITE": 1
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
```text
|
|
329
|
-
|
|
330
|
-
## Theme Development
|
|
331
|
-
|
|
332
|
-
### Theme Structure (Block Theme)
|
|
333
|
-
|
|
334
|
-
```text
|
|
335
|
-
theme-name/
|
|
336
|
-
├── style.css # Theme metadata
|
|
337
|
-
├── theme.json # Global settings
|
|
338
|
-
├── functions.php # Theme functions
|
|
339
|
-
├── templates/ # Block templates
|
|
340
|
-
│ ├── index.html
|
|
341
|
-
│ ├── single.html
|
|
342
|
-
│ ├── page.html
|
|
343
|
-
│ └── archive.html
|
|
344
|
-
├── parts/ # Template parts
|
|
345
|
-
│ ├── header.html
|
|
346
|
-
│ └── footer.html
|
|
347
|
-
└── patterns/ # Block patterns
|
|
348
|
-
└── hero.php
|
|
349
|
-
```text
|
|
350
|
-
|
|
351
|
-
### Theme Scaffolding
|
|
352
|
-
|
|
353
|
-
```bash
|
|
354
|
-
# Create block theme
|
|
355
|
-
wp scaffold theme theme-name --theme_name="Theme Name" --activate
|
|
356
|
-
|
|
357
|
-
# Create child theme (for Kadence)
|
|
358
|
-
wp scaffold child-theme kadence-child --parent_theme=kadence --activate
|
|
359
|
-
```text
|
|
360
|
-
|
|
361
|
-
### Template Hierarchy
|
|
362
|
-
|
|
363
|
-
```text
|
|
364
|
-
is_front_page() → front-page.html → home.html → index.html
|
|
365
|
-
is_single() → single-{post-type}-{slug}.html → single-{post-type}.html → single.html → singular.html → index.html
|
|
366
|
-
is_page() → page-{slug}.html → page-{id}.html → page.html → singular.html → index.html
|
|
367
|
-
is_archive() → archive-{post-type}.html → archive.html → index.html
|
|
368
|
-
is_category() → category-{slug}.html → category-{id}.html → category.html → archive.html → index.html
|
|
369
|
-
is_search() → search.html → index.html
|
|
370
|
-
is_404() → 404.html → index.html
|
|
371
|
-
```text
|
|
372
|
-
|
|
373
|
-
## Plugin Development
|
|
374
|
-
|
|
375
|
-
### Plugin Scaffolding
|
|
376
|
-
|
|
377
|
-
```bash
|
|
378
|
-
# Basic plugin
|
|
379
|
-
wp scaffold plugin my-plugin --plugin_name="My Plugin" --activate
|
|
380
|
-
|
|
381
|
-
# Plugin with CPT
|
|
382
|
-
wp scaffold plugin my-plugin --plugin_name="My Plugin" --activate
|
|
383
|
-
wp scaffold post-type book --plugin=my-plugin
|
|
384
|
-
|
|
385
|
-
# Plugin with block
|
|
386
|
-
wp scaffold block my-block --plugin=my-plugin
|
|
387
|
-
```text
|
|
388
|
-
|
|
389
|
-
### Plugin Header
|
|
390
|
-
|
|
391
|
-
```php
|
|
392
|
-
<?php
|
|
393
|
-
/**
|
|
394
|
-
* Plugin Name: My Plugin
|
|
395
|
-
* Plugin URI: https://example.com/my-plugin
|
|
396
|
-
* Description: Plugin description
|
|
397
|
-
* Version: 1.0.0
|
|
398
|
-
* Author: Your Name
|
|
399
|
-
* Author URI: https://example.com
|
|
400
|
-
* License: GPL-2.0+
|
|
401
|
-
* License URI: https://www.gnu.org/licenses/gpl-2.0.txt
|
|
402
|
-
* Text Domain: my-plugin
|
|
403
|
-
* Domain Path: /languages
|
|
404
|
-
* Requires at least: 6.0
|
|
405
|
-
* Requires PHP: 7.4
|
|
406
|
-
*/
|
|
407
|
-
```text
|
|
408
|
-
|
|
409
|
-
### Hooks & Filters
|
|
410
|
-
|
|
411
|
-
```php
|
|
412
|
-
// Actions (do something)
|
|
413
|
-
add_action('init', 'my_plugin_init');
|
|
414
|
-
add_action('wp_enqueue_scripts', 'my_plugin_enqueue');
|
|
415
|
-
add_action('save_post', 'my_plugin_save', 10, 3);
|
|
416
|
-
|
|
417
|
-
// Filters (modify something)
|
|
418
|
-
add_filter('the_content', 'my_plugin_filter_content');
|
|
419
|
-
add_filter('wp_title', 'my_plugin_filter_title', 10, 2);
|
|
420
|
-
|
|
421
|
-
// Custom hooks
|
|
422
|
-
do_action('my_plugin_before_output');
|
|
423
|
-
$value = apply_filters('my_plugin_value', $default);
|
|
424
|
-
```text
|
|
425
|
-
|
|
426
|
-
## Plugin & Theme Analysis Workflow
|
|
427
|
-
|
|
428
|
-
### Local Development Directory
|
|
429
|
-
|
|
430
|
-
All plugin and theme development/analysis happens in `~/Git/wordpress/`:
|
|
431
|
-
|
|
432
|
-
```text
|
|
433
|
-
~/Git/wordpress/
|
|
434
|
-
├── {plugin-slug}/ # Cloned plugin for analysis/patching
|
|
435
|
-
├── {plugin-slug}-addon/ # Custom addon for pro/closed plugins
|
|
436
|
-
├── {plugin-slug}-fix/ # Patches that survive updates
|
|
437
|
-
├── {theme-slug}/ # Cloned theme
|
|
438
|
-
└── {theme-slug}-child/ # Child theme customizations
|
|
439
|
-
```text
|
|
440
|
-
|
|
441
|
-
### Workflow: Analyzing a Plugin/Theme
|
|
442
|
-
|
|
443
|
-
1. **Clone to local dev folder**:
|
|
444
|
-
|
|
445
|
-
```bash
|
|
446
|
-
# From WordPress plugin directory or GitHub
|
|
447
|
-
cd ~/Git/wordpress
|
|
448
|
-
git clone https://github.com/developer/plugin-slug.git
|
|
449
|
-
|
|
450
|
-
# Or extract from zip (for pro plugins)
|
|
451
|
-
unzip ~/Downloads/plugin-name.zip -d ~/Git/wordpress/
|
|
452
|
-
mv ~/Git/wordpress/plugin-name ~/Git/wordpress/plugin-slug
|
|
453
|
-
cd ~/Git/wordpress/plugin-slug
|
|
454
|
-
git init
|
|
455
|
-
git add .
|
|
456
|
-
git commit -m "Initial import of plugin-slug v1.0.0"
|
|
457
|
-
```
|
|
458
|
-
|
|
459
|
-
2. **Analyze the code**:
|
|
460
|
-
|
|
461
|
-
```bash
|
|
462
|
-
# Use osgrep for semantic search
|
|
463
|
-
osgrep "where does this plugin handle user authentication"
|
|
464
|
-
|
|
465
|
-
# Or traditional grep
|
|
466
|
-
grep -r "add_action\|add_filter" --include="*.php" .
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
3. **Test in LocalWP**:
|
|
470
|
-
|
|
471
|
-
```bash
|
|
472
|
-
# Symlink to LocalWP site
|
|
473
|
-
ln -s ~/Git/wordpress/plugin-slug "~/Local Sites/test-site/app/public/wp-content/plugins/"
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
### Workflow: Contributing to Open Source
|
|
477
|
-
|
|
478
|
-
For open-source plugins/themes where you can submit PRs:
|
|
479
|
-
|
|
480
|
-
1. **Fork on GitHub** (via web UI)
|
|
481
|
-
|
|
482
|
-
2. **Clone your fork**:
|
|
483
|
-
|
|
484
|
-
```bash
|
|
485
|
-
cd ~/Git/wordpress
|
|
486
|
-
git clone git@github.com:marcusquinn/plugin-slug.git
|
|
487
|
-
cd plugin-slug
|
|
488
|
-
git remote add upstream https://github.com/original/plugin-slug.git
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
3. **Create feature/fix branch**:
|
|
492
|
-
|
|
493
|
-
```bash
|
|
494
|
-
git checkout -b fix/issue-description
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
4. **Make changes, test, commit**:
|
|
498
|
-
|
|
499
|
-
```bash
|
|
500
|
-
git add .
|
|
501
|
-
git commit -m "fix: description of the fix"
|
|
502
|
-
git push origin fix/issue-description
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
5. **Create PR** on GitHub
|
|
506
|
-
|
|
507
|
-
### Workflow: Patching Pro/Closed Plugins
|
|
508
|
-
|
|
509
|
-
For premium plugins or plugins where PRs aren't accepted, create a companion plugin:
|
|
510
|
-
|
|
511
|
-
1. **Create addon/fix plugin**:
|
|
512
|
-
|
|
513
|
-
```bash
|
|
514
|
-
cd ~/Git/wordpress
|
|
515
|
-
mkdir plugin-slug-fix
|
|
516
|
-
cd plugin-slug-fix
|
|
517
|
-
git init
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
2. **Create the fix plugin**:
|
|
521
|
-
|
|
522
|
-
```php
|
|
523
|
-
<?php
|
|
524
|
-
/**
|
|
525
|
-
* Plugin Name: Plugin Slug Fix
|
|
526
|
-
* Description: Patches and fixes for Plugin Slug that survive updates
|
|
527
|
-
* Version: 1.0.0
|
|
528
|
-
* Requires Plugins: plugin-slug
|
|
529
|
-
*/
|
|
530
|
-
|
|
531
|
-
// Ensure original plugin is loaded first
|
|
532
|
-
add_action('plugins_loaded', 'plugin_slug_fix_init', 20);
|
|
533
|
-
|
|
534
|
-
function plugin_slug_fix_init() {
|
|
535
|
-
// Only run if original plugin is active
|
|
536
|
-
if (!class_exists('Original_Plugin_Class')) {
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
// Remove problematic hook
|
|
541
|
-
remove_action('init', 'original_problematic_function');
|
|
542
|
-
|
|
543
|
-
// Add fixed version
|
|
544
|
-
add_action('init', 'fixed_function');
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
function fixed_function() {
|
|
548
|
-
// Your fixed implementation
|
|
549
|
-
}
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
3. **For filter overrides**:
|
|
553
|
-
|
|
554
|
-
```php
|
|
555
|
-
// Override a filter with higher priority
|
|
556
|
-
add_filter('original_filter', 'my_fixed_filter', 999);
|
|
557
|
-
|
|
558
|
-
function my_fixed_filter($value) {
|
|
559
|
-
// Your fixed logic
|
|
560
|
-
return $modified_value;
|
|
561
|
-
}
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
### Naming Conventions
|
|
565
|
-
|
|
566
|
-
| Scenario | Folder Name | Example |
|
|
567
|
-
|----------|-------------|---------|
|
|
568
|
-
| Cloned for analysis | `{slug}` | `readabler` |
|
|
569
|
-
| Open source fork | `{slug}` | `flavor` (your fork) |
|
|
570
|
-
| Addon for pro plugin | `{slug}-addon` | `kadence-blocks-addon` |
|
|
571
|
-
| Fix/patch plugin | `{slug}-fix` | `media-file-renamer-fix` |
|
|
572
|
-
| Child theme | `{slug}-child` | `kadence-child` |
|
|
573
|
-
|
|
574
|
-
### Best Practices for Fix Plugins
|
|
575
|
-
|
|
576
|
-
1. **Always check if original plugin exists**:
|
|
577
|
-
|
|
578
|
-
```php
|
|
579
|
-
if (!function_exists('original_function')) {
|
|
580
|
-
return;
|
|
581
|
-
}
|
|
582
|
-
```
|
|
583
|
-
|
|
584
|
-
2. **Use appropriate hook priority**:
|
|
585
|
-
- Lower number = runs earlier
|
|
586
|
-
- Higher number = runs later (for overrides)
|
|
587
|
-
- Default is 10
|
|
588
|
-
|
|
589
|
-
3. **Document what you're fixing**:
|
|
590
|
-
|
|
591
|
-
```php
|
|
592
|
-
/**
|
|
593
|
-
* Fix: Original plugin doesn't handle multisite correctly
|
|
594
|
-
* Issue: https://github.com/original/plugin/issues/123
|
|
595
|
-
* Affects: v2.0.0 - v2.3.0
|
|
596
|
-
* Remove when: Fixed in upstream
|
|
597
|
-
*/
|
|
598
|
-
```
|
|
599
|
-
|
|
600
|
-
4. **Version compatibility checks**:
|
|
601
|
-
|
|
602
|
-
```php
|
|
603
|
-
if (defined('ORIGINAL_PLUGIN_VERSION') &&
|
|
604
|
-
version_compare(ORIGINAL_PLUGIN_VERSION, '2.4.0', '<')) {
|
|
605
|
-
// Apply fix only for versions before 2.4.0
|
|
606
|
-
}
|
|
607
|
-
```
|
|
608
|
-
|
|
609
|
-
5. **Keep fixes minimal and targeted**:
|
|
610
|
-
- One fix per function/hook
|
|
611
|
-
- Don't copy entire files
|
|
612
|
-
- Use hooks/filters when possible
|
|
613
|
-
|
|
614
|
-
### Syncing with LocalWP
|
|
615
|
-
|
|
616
|
-
```bash
|
|
617
|
-
# Create sync script
|
|
618
|
-
cat > ~/Git/wordpress/sync-to-local.sh << 'EOF'
|
|
619
|
-
#!/bin/bash
|
|
620
|
-
PLUGIN_SLUG="$1"
|
|
621
|
-
SITE_NAME="${2:-test-site}"
|
|
622
|
-
|
|
623
|
-
if [ -z "$PLUGIN_SLUG" ]; then
|
|
624
|
-
echo "Usage: sync-to-local.sh plugin-slug [site-name]"
|
|
625
|
-
exit 1
|
|
626
|
-
fi
|
|
627
|
-
|
|
628
|
-
SOURCE="$HOME/Git/wordpress/$PLUGIN_SLUG"
|
|
629
|
-
DEST="$HOME/Local Sites/$SITE_NAME/app/public/wp-content/plugins/$PLUGIN_SLUG"
|
|
630
|
-
|
|
631
|
-
rsync -av --delete \
|
|
632
|
-
--exclude='.git' \
|
|
633
|
-
--exclude='node_modules' \
|
|
634
|
-
--exclude='vendor' \
|
|
635
|
-
"$SOURCE/" "$DEST/"
|
|
636
|
-
|
|
637
|
-
echo "Synced $PLUGIN_SLUG to $SITE_NAME"
|
|
638
|
-
EOF
|
|
639
|
-
chmod +x ~/Git/wordpress/sync-to-local.sh
|
|
640
|
-
```text
|
|
641
|
-
|
|
642
|
-
Usage:
|
|
643
|
-
|
|
644
|
-
```bash
|
|
645
|
-
~/Git/wordpress/sync-to-local.sh readabler-fix my-test-site
|
|
646
|
-
```text
|
|
647
|
-
|
|
648
|
-
## Debugging
|
|
649
|
-
|
|
650
|
-
### Debug Constants
|
|
651
|
-
|
|
652
|
-
```php
|
|
653
|
-
// wp-config.php
|
|
654
|
-
define('WP_DEBUG', true);
|
|
655
|
-
define('WP_DEBUG_LOG', true); // Log to wp-content/debug.log
|
|
656
|
-
define('WP_DEBUG_DISPLAY', false); // Don't show on screen
|
|
657
|
-
define('SCRIPT_DEBUG', true); // Use non-minified scripts
|
|
658
|
-
define('SAVEQUERIES', true); // Log database queries
|
|
659
|
-
```text
|
|
660
|
-
|
|
661
|
-
### Debug Log Location
|
|
662
|
-
|
|
663
|
-
```bash
|
|
664
|
-
# View debug log
|
|
665
|
-
tail -f ~/Local\ Sites/site-name/app/public/wp-content/debug.log
|
|
666
|
-
|
|
667
|
-
# wp-env
|
|
668
|
-
wp-env run cli tail -f /var/www/html/wp-content/debug.log
|
|
669
|
-
```text
|
|
670
|
-
|
|
671
|
-
### Query Monitor
|
|
672
|
-
|
|
673
|
-
Essential debugging plugin (included in recommended stack):
|
|
674
|
-
|
|
675
|
-
```bash
|
|
676
|
-
wp plugin install query-monitor --activate
|
|
677
|
-
```text
|
|
678
|
-
|
|
679
|
-
Shows:
|
|
680
|
-
- Database queries
|
|
681
|
-
- PHP errors and warnings
|
|
682
|
-
- HTTP requests
|
|
683
|
-
- Hooks and actions
|
|
684
|
-
- Template hierarchy
|
|
685
|
-
- Memory usage
|
|
686
|
-
|
|
687
|
-
### Error Diagnosis Workflow
|
|
688
|
-
|
|
689
|
-
1. **Enable debugging**: Set `WP_DEBUG` constants
|
|
690
|
-
2. **Check debug.log**: Look for PHP errors/warnings
|
|
691
|
-
3. **Use Query Monitor**: Check admin bar for issues
|
|
692
|
-
4. **Inspect database**: Use `@localwp` for SQL access
|
|
693
|
-
5. **Check hooks**: Use `wp hook list` or Query Monitor
|
|
694
|
-
6. **Profile performance**: Use `wp profile` or Code Profiler Pro
|
|
695
|
-
|
|
696
|
-
## WP-CLI Development Commands
|
|
697
|
-
|
|
698
|
-
### Scaffold Commands
|
|
699
|
-
|
|
700
|
-
```bash
|
|
701
|
-
# Theme
|
|
702
|
-
wp scaffold theme theme-name
|
|
703
|
-
|
|
704
|
-
# Child theme
|
|
705
|
-
wp scaffold child-theme child-name --parent_theme=parent-name
|
|
706
|
-
|
|
707
|
-
# Plugin
|
|
708
|
-
wp scaffold plugin plugin-name
|
|
709
|
-
|
|
710
|
-
# Post type
|
|
711
|
-
wp scaffold post-type cpt-name --plugin=plugin-name
|
|
712
|
-
|
|
713
|
-
# Taxonomy
|
|
714
|
-
wp scaffold taxonomy tax-name --post_types=cpt-name --plugin=plugin-name
|
|
715
|
-
|
|
716
|
-
# Block
|
|
717
|
-
wp scaffold block block-name --plugin=plugin-name
|
|
718
|
-
```text
|
|
719
|
-
|
|
720
|
-
### Database Commands
|
|
721
|
-
|
|
722
|
-
```bash
|
|
723
|
-
# Export
|
|
724
|
-
wp db export backup.sql
|
|
725
|
-
|
|
726
|
-
# Import
|
|
727
|
-
wp db import backup.sql
|
|
728
|
-
|
|
729
|
-
# Query
|
|
730
|
-
wp db query "SELECT * FROM wp_posts LIMIT 5"
|
|
731
|
-
|
|
732
|
-
# Search/replace
|
|
733
|
-
wp search-replace 'old.domain.com' 'new.domain.com' --dry-run
|
|
734
|
-
wp search-replace 'old.domain.com' 'new.domain.com'
|
|
735
|
-
|
|
736
|
-
# Optimize
|
|
737
|
-
wp db optimize
|
|
738
|
-
|
|
739
|
-
# Check tables
|
|
740
|
-
wp db check
|
|
741
|
-
```text
|
|
742
|
-
|
|
743
|
-
### Development Commands
|
|
744
|
-
|
|
745
|
-
```bash
|
|
746
|
-
# Shell (interactive PHP)
|
|
747
|
-
wp shell
|
|
748
|
-
|
|
749
|
-
# Eval PHP
|
|
750
|
-
wp eval 'echo get_option("siteurl");'
|
|
751
|
-
|
|
752
|
-
# Generate test data
|
|
753
|
-
wp post generate --count=10
|
|
754
|
-
wp user generate --count=5
|
|
755
|
-
|
|
756
|
-
# Cache flush
|
|
757
|
-
wp cache flush
|
|
758
|
-
|
|
759
|
-
# Transient cleanup
|
|
760
|
-
wp transient delete --all
|
|
761
|
-
```text
|
|
762
|
-
|
|
763
|
-
## PHPUnit Testing
|
|
764
|
-
|
|
765
|
-
### Setup
|
|
766
|
-
|
|
767
|
-
```bash
|
|
768
|
-
# With wp-env
|
|
769
|
-
wp-env run tests-cli phpunit
|
|
770
|
-
|
|
771
|
-
# With Composer
|
|
772
|
-
composer require --dev phpunit/phpunit
|
|
773
|
-
composer require --dev wp-phpunit/wp-phpunit
|
|
774
|
-
|
|
775
|
-
# Run tests
|
|
776
|
-
vendor/bin/phpunit
|
|
777
|
-
```text
|
|
778
|
-
|
|
779
|
-
### Test File Structure
|
|
780
|
-
|
|
781
|
-
```php
|
|
782
|
-
<?php
|
|
783
|
-
class Test_My_Plugin extends WP_UnitTestCase {
|
|
784
|
-
|
|
785
|
-
public function setUp(): void {
|
|
786
|
-
parent::setUp();
|
|
787
|
-
// Setup code
|
|
788
|
-
}
|
|
789
|
-
|
|
790
|
-
public function tearDown(): void {
|
|
791
|
-
parent::tearDown();
|
|
792
|
-
// Cleanup code
|
|
793
|
-
}
|
|
794
|
-
|
|
795
|
-
public function test_example() {
|
|
796
|
-
$this->assertTrue(true);
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
public function test_post_creation() {
|
|
800
|
-
$post_id = $this->factory->post->create([
|
|
801
|
-
'post_title' => 'Test Post',
|
|
802
|
-
'post_status' => 'publish'
|
|
803
|
-
]);
|
|
804
|
-
|
|
805
|
-
$this->assertIsInt($post_id);
|
|
806
|
-
$this->assertEquals('Test Post', get_the_title($post_id));
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
```text
|
|
810
|
-
|
|
811
|
-
### phpunit.xml
|
|
812
|
-
|
|
813
|
-
```xml
|
|
814
|
-
<?xml version="1.0"?>
|
|
815
|
-
<phpunit
|
|
816
|
-
bootstrap="tests/bootstrap.php"
|
|
817
|
-
backupGlobals="false"
|
|
818
|
-
colors="true"
|
|
819
|
-
convertErrorsToExceptions="true"
|
|
820
|
-
convertNoticesToExceptions="true"
|
|
821
|
-
convertWarningsToExceptions="true"
|
|
822
|
-
>
|
|
823
|
-
<testsuites>
|
|
824
|
-
<testsuite name="My Plugin Test Suite">
|
|
825
|
-
<directory suffix=".php">./tests/</directory>
|
|
826
|
-
</testsuite>
|
|
827
|
-
</testsuites>
|
|
828
|
-
</phpunit>
|
|
829
|
-
```text
|
|
830
|
-
|
|
831
|
-
## E2E Testing
|
|
832
|
-
|
|
833
|
-
### Playwright
|
|
834
|
-
|
|
835
|
-
```bash
|
|
836
|
-
# Install
|
|
837
|
-
npm install -D @playwright/test
|
|
838
|
-
|
|
839
|
-
# Run
|
|
840
|
-
npx playwright test
|
|
841
|
-
|
|
842
|
-
# Interactive
|
|
843
|
-
npx playwright test --ui
|
|
844
|
-
```text
|
|
845
|
-
|
|
846
|
-
### Cypress
|
|
847
|
-
|
|
848
|
-
```bash
|
|
849
|
-
# Install
|
|
850
|
-
npm install -D cypress
|
|
851
|
-
|
|
852
|
-
# Run
|
|
853
|
-
npx cypress run
|
|
854
|
-
|
|
855
|
-
# Interactive
|
|
856
|
-
npx cypress open
|
|
857
|
-
```text
|
|
858
|
-
|
|
859
|
-
## Security Scanning
|
|
860
|
-
|
|
861
|
-
Before committing WordPress code:
|
|
862
|
-
|
|
863
|
-
```bash
|
|
864
|
-
# Scan for secrets
|
|
865
|
-
./.agent/scripts/secretlint-helper.sh scan
|
|
866
|
-
|
|
867
|
-
# Check for hardcoded credentials
|
|
868
|
-
grep -r "password\|api_key\|secret" --include="*.php" .
|
|
869
|
-
```text
|
|
870
|
-
|
|
871
|
-
## Related Subagents
|
|
872
|
-
|
|
873
|
-
| Task | Subagent | Reason |
|
|
874
|
-
|------|----------|--------|
|
|
875
|
-
| Database inspection | `@localwp` | Read-only SQL access to LocalWP databases |
|
|
876
|
-
| Content/maintenance | `@wp-admin` | Admin tasks outside development scope |
|
|
877
|
-
| E2E testing | `@browser-automation` | Playwright/Stagehand for UI testing |
|
|
878
|
-
| Code quality | `@code-standards` | PHP/JS linting, security scanning |
|
|
879
|
-
| Security scanning | `@code-standards` | Snyk, Secretlint for vulnerability detection |
|
|
880
|
-
| DNS issues | `@dns-providers` | Cloudflare, Namecheap, Spaceship, 101domains |
|
|
881
|
-
| Email testing | `@ses` | Amazon SES configuration |
|
|
882
|
-
| SSL/CDN | `@cloudflare` | Cloudflare SSL, caching, security |
|
|
883
|
-
|
|
884
|
-
## Related Documentation
|
|
885
|
-
|
|
886
|
-
| Topic | File |
|
|
887
|
-
|-------|------|
|
|
888
|
-
| Bug fixing workflow | `bug-fixing.md` |
|
|
889
|
-
| Code review checklist | `code-review.md` |
|
|
890
|
-
| Git branching | `git-workflow.md` |
|
|
891
|
-
| Release process | `release-process.md` |
|
|
892
|
-
| Error feedback loops | `error-checking-feedback-loops.md` |
|
|
893
|
-
| Version management | `version-management.md` |
|
|
894
|
-
| Credential setup | `api-key-setup.md` |
|
|
895
|
-
| Security policies | `security-requirements.md` |
|
|
896
|
-
| Preferred plugins | `wp-preferred.md` |
|
|
897
|
-
|
|
898
|
-
## Environment Comparison
|
|
899
|
-
|
|
900
|
-
| Feature | Playground | LocalWP | wp-env |
|
|
901
|
-
|---------|------------|---------|--------|
|
|
902
|
-
| Setup Time | Instant | 5-10 min | 2-5 min |
|
|
903
|
-
| Persistence | None | Full | Partial |
|
|
904
|
-
| PHP Versions | Limited | Many | Configurable |
|
|
905
|
-
| Database | In-memory | MySQL | MySQL |
|
|
906
|
-
| WP-CLI | Yes | Yes | Yes |
|
|
907
|
-
| Multisite | Yes | Yes | Yes |
|
|
908
|
-
| Docker Required | No | No | Yes |
|
|
909
|
-
| GitHub Actions | Works* | N/A | Works |
|
|
910
|
-
| Best For | Quick testing | Full dev | CI/Testing |
|
|
911
|
-
|
|
912
|
-
*Playground may be flaky in CI environments
|
|
913
|
-
|
|
914
|
-
## Testing Checklist
|
|
915
|
-
|
|
916
|
-
Before releasing a plugin/theme:
|
|
917
|
-
|
|
918
|
-
- [ ] Tested on single site
|
|
919
|
-
- [ ] Tested on multisite
|
|
920
|
-
- [ ] Tested with minimum PHP version
|
|
921
|
-
- [ ] Tested with minimum WordPress version
|
|
922
|
-
- [ ] Tested with latest WordPress version
|
|
923
|
-
- [ ] PHPUnit tests passing
|
|
924
|
-
- [ ] E2E tests passing
|
|
925
|
-
- [ ] No PHP errors/warnings in debug log
|
|
926
|
-
- [ ] No JavaScript console errors
|
|
927
|
-
- [ ] Tested activation/deactivation
|
|
928
|
-
- [ ] Tested uninstall process
|
|
929
|
-
- [ ] Security scan completed
|
|
930
|
-
- [ ] Code quality checks passed
|
|
931
|
-
|
|
932
|
-
## Resources
|
|
933
|
-
|
|
934
|
-
- [WordPress Playground](https://wordpress.github.io/wordpress-playground/)
|
|
935
|
-
- [WordPress Playground Blueprints](https://wordpress.github.io/wordpress-playground/blueprints)
|
|
936
|
-
- [LocalWP Documentation](https://localwp.com/help-docs/)
|
|
937
|
-
- [@wordpress/env Documentation](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-env/)
|
|
938
|
-
- [PHPUnit for WordPress](https://make.wordpress.org/core/handbook/testing/automated-testing/phpunit/)
|
|
939
|
-
- [WordPress MCP Adapter](https://github.com/WordPress/mcp-adapter)
|
|
940
|
-
- [WP-CLI Commands](https://developer.wordpress.org/cli/commands/)
|