[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C221V1PYQWWN2CVKSDDHC9":3,"skill-same:01M6C221V1PYQWWN2CVKSDDHC9":104},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6C221V1PYQWWN2CVKSDDHC9","wp-plugin-development",null,"Use when developing WordPress plugins: architecture and hooks, activation\u002Fdeactivation\u002Funinstall, admin UI and Settings API, data storage, cron\u002Ftasks, security (nonces\u002Fcapabilities\u002Fsanitization\u002Fescaping), and release packaging.","gambitph\u002FCimo","gambitph","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F3227089?v=4","01M6C1ZD8129MTRC23K53VJ45E","Gambit Technologies","01M6C1ZDCJPEHP3CKCWNG7HDVV",2,"GPL-2.0","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"wp plugin development","plugin","development","capabilities","use","packaging","settings","node","filesystem","Bash","api","admin","uninstall","release","tasks","architecture","workflows","storage","wordpress","cli","2026-11-10 10:12:30",false,"---\nname: wp-plugin-development\ndescription: \"Use when developing WordPress plugins: architecture and hooks, activation\u002Fdeactivation\u002Funinstall, admin UI and Settings API, data storage, cron\u002Ftasks, security (nonces\u002Fcapabilities\u002Fsanitization\u002Fescaping), and release packaging.\"\ncompatibility: \"Targets WordPress 7.0+ (PHP 7.4.0+). Filesystem-based agent with bash + node. Some workflows require WP-CLI.\"\n---\n\n# WP Plugin Development\n\n## When to use\n\nUse this skill for plugin work such as:\n\n- creating or refactoring plugin structure (bootstrap, includes, namespaces\u002Fclasses)\n- adding hooks\u002Factions\u002Ffilters\n- activation\u002Fdeactivation\u002Funinstall behavior and migrations\n- adding settings pages \u002F options \u002F admin UI (Settings API)\n- security fixes (nonces, capabilities, sanitization\u002Fescaping, SQL safety)\n- packaging a release (build artifacts, readme, assets)\n\n## Inputs required\n\n- Repo root + target plugin(s) (path to plugin main file if known).\n- Where this plugin runs: single site vs multisite; WP.com conventions if applicable.\n- Target WordPress + PHP versions (affects available APIs and placeholder support in `$wpdb->prepare()`).\n\n## Procedure\n\n### 0) Triage and locate plugin entrypoints\n\n1. Run triage:\n   - `node skills\u002Fwp-project-triage\u002Fscripts\u002Fdetect_wp_project.mjs`\n2. Detect plugin headers (deterministic scan):\n   - `node skills\u002Fwp-plugin-development\u002Fscripts\u002Fdetect_plugins.mjs`\n\nIf this is a full site repo, pick the specific plugin under `wp-content\u002Fplugins\u002F` or `mu-plugins\u002F` before changing code.\n\n### 1) Follow a predictable architecture\n\nGuidelines:\n\n- Keep a single bootstrap (main plugin file with header).\n- Avoid heavy side effects at file load time; load on hooks.\n- Prefer a dedicated loader\u002Fclass to register hooks.\n- Keep admin-only code behind `is_admin()` (or admin hooks) to reduce frontend overhead.\n\nSee:\n- `references\u002Fstructure.md`\n\n### 2) Hooks and lifecycle (activation\u002Fdeactivation\u002Funinstall)\n\nActivation hooks are fragile; follow guardrails:\n\n- register activation\u002Fdeactivation hooks at top-level, not inside other hooks\n- flush rewrite rules only when needed and only after registering CPTs\u002Frules\n- uninstall should be explicit and safe (`uninstall.php` or `register_uninstall_hook`)\n\nSee:\n- `references\u002Flifecycle.md`\n\n### 3) Settings and admin UI (Settings API)\n\nPrefer Settings API for options:\n\n- `register_setting()`, `add_settings_section()`, `add_settings_field()`\n- sanitize via `sanitize_callback`\n\nSee:\n- `references\u002Fsettings-api.md`\n\n### 4) Security baseline (always)\n\nBefore shipping:\n\n- Validate\u002Fsanitize input early; escape output late.\n- Use nonces to prevent CSRF *and* capability checks for authorization.\n- Avoid directly trusting `$_POST` \u002F `$_GET`; use `wp_unslash()` and specific keys.\n- Use `$wpdb->prepare()` for SQL; avoid building SQL with string concatenation.\n\nSee:\n- `references\u002Fsecurity.md`\n\n### 5) Data storage, cron, migrations (if needed)\n\n- Prefer options for small config; custom tables only if necessary.\n- For cron tasks, ensure idempotency and provide manual run paths (WP-CLI or admin).\n- For schema changes, write upgrade routines and store schema version.\n\nSee:\n- `references\u002Fdata-and-cron.md`\n\n## Verification\n\n- Plugin activates with no fatals\u002Fnotices.\n- Settings save and read correctly (capability + nonce enforced).\n- Uninstall removes intended data (and nothing else).\n- Run repo lint\u002Ftests (PHPUnit\u002FPHPCS if present) and any JS build steps if the plugin ships assets.\n\n## Failure modes \u002F debugging\n\n- Activation hook not firing:\n  - hook registered incorrectly (not in main file scope), wrong main file path, or plugin is network-activated\n- Settings not saving:\n  - settings not registered, wrong option group, missing capability, nonce failure\n- Security regressions:\n  - nonce present but missing capability checks; or sanitized input not escaped on output\n\nSee:\n- `references\u002Fdebugging.md`\n\n## Escalation\n\nFor canonical detail, consult the Plugin Handbook and security guidelines before inventing patterns.\n","# WP Plugin Development\n\n## When to use\n\nUse this skill for plugin work such as:\n\n- creating or refactoring plugin structure (bootstrap, includes, namespaces\u002Fclasses)\n- adding hooks\u002Factions\u002Ffilters\n- activation\u002Fdeactivation\u002Funinstall behavior and migrations\n- adding settings pages \u002F options \u002F admin UI (Settings API)\n- security fixes (nonces, capabilities, sanitization\u002Fescaping, SQL safety)\n- packaging a release (build artifacts, readme, assets)\n\n## Inputs required\n\n- Repo root + target plugin(s) (path to plugin main file if known).\n- Where this plugin runs: single site vs multisite; WP.com conventions if applicable.\n- Target WordPress + PHP versions (affects available APIs and placeholder support in `$wpdb->prepare()`).\n\n## Procedure\n\n### 0) Triage and locate plugin entrypoints\n\n1. Run triage:\n   - `node skills\u002Fwp-project-triage\u002Fscripts\u002Fdetect_wp_project.mjs`\n2. Detect plugin headers (deterministic scan):\n   - `node skills\u002Fwp-plugin-development\u002Fscripts\u002Fdetect_plugins.mjs`\n\nIf this is a full site repo, pick the specific plugin under `wp-content\u002Fplugins\u002F` or `mu-plugins\u002F` before changing code.\n\n### 1) Follow a predictable architecture\n\nGuidelines:\n\n- Keep a single bootstrap (main plugin file with header).\n- Avoid heavy side effects at file load time; load on hooks.\n- Prefer a dedicated loader\u002Fclass to register hooks.\n- Keep admin-only code behind `is_admin()` (or admin hooks) to reduce frontend overhead.\n\nSee:\n- `references\u002Fstructure.md`\n\n### 2) Hooks and lifecycle (activation\u002Fdeactivation\u002Funinstall)\n\nActivation hooks are fragile; follow guardrails:\n\n- register activation\u002Fdeactivation hooks at top-level, not inside other hooks\n- flush rewrite rules only when needed and only after registering CPTs\u002Frules\n- uninstall should be explicit and safe (`uninstall.php` or `register_uninstall_hook`)\n\nSee:\n- `references\u002Flifecycle.md`\n\n### 3) Settings and admin UI (Settings API)\n\nPrefer Settings API for options:\n\n- `register_setting()`, `add_settings_section()`, `add_settings_field()`\n- sanitize via `sanitize_callback`\n\nSee:\n- `references\u002Fsettings-api.md`\n\n### 4) Security baseline (always)\n\nBefore shipping:\n\n- Validate\u002Fsanitize input early; escape output late.\n- Use nonces to prevent CSRF *and* capability checks for authorization.\n- Avoid directly trusting `$_POST` \u002F `$_GET`; use `wp_unslash()` and specific keys.\n- Use `$wpdb->prepare()` for SQL; avoid building SQL with string concatenation.\n\nSee:\n- `references\u002Fsecurity.md`\n\n### 5) Data storage, cron, migrations (if needed)\n\n- Prefer options for small config; custom tables only if necessary.\n- For cron tasks, ensure idempotency and provide manual run paths (WP-CLI or admin).\n- For schema changes, write upgrade routines and store schema version.\n\nSee:\n- `references\u002Fdata-and-cron.md`\n\n## Verification\n\n- Plugin activates with no fatals\u002Fnotices.\n- Settings save and read correctly (capability + nonce enforced).\n- Uninstall removes intended data (and nothing else).\n- Run repo lint\u002Ftests (PHPUnit\u002FPHPCS if present) and any JS build steps if the plugin ships assets.\n\n## Failure modes \u002F debugging\n\n- Activation hook not firing:\n  - hook registered incorrectly (not in main file scope), wrong main file path, or plugin is network-activated\n- Settings not saving:\n  - settings not registered, wrong option group, missing capability, nonce failure\n- Security regressions:\n  - nonce present but missing capability checks; or sanitized input not escaped on output\n\nSee:\n- `references\u002Fdebugging.md`\n\n## Escalation\n\nFor canonical detail, consult the Plugin Handbook and security guidelines before inventing patterns.\n",{"name":5,"description":7,"compatibility":49},"Targets WordPress 7.0+ (PHP 7.4.0+). Filesystem-based agent with bash + node. Some workflows require WP-CLI.","develop","647b3a86ad96843d26f677d200372b67b7336254",".cursor\u002Fskills\u002Fwp-plugin-development",0,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo","https:\u002F\u002Fgithub.com\u002Fgambitph","https:\u002F\u002Fwpstackable.com","2026-10-15 14:34:26",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add gambitph\u002FCimo --skill wp-plugin-development",{"tool":64,"command":65},"bunx","bunx skills add gambitph\u002FCimo --skill wp-plugin-development",{"tool":67,"command":68},"pnpm","pnpm dlx skills add gambitph\u002FCimo --skill wp-plugin-development","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002FSKILL.md",true,[72,78,82,86,90,94,98],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fdata-and-cron.md","REFERENCE","参考文档",678,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002Freferences\u002Fdata-and-cron.md",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fdebugging.md",559,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002Freferences\u002Fdebugging.md",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Flifecycle.md",854,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002Freferences\u002Flifecycle.md",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fsecurity.md",787,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002Freferences\u002Fsecurity.md",{"path":91,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fsettings-api.md",703,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002Freferences\u002Fsettings-api.md",{"path":95,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fstructure.md",401,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002Freferences\u002Fstructure.md",{"path":99,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":102,"sourceHtmlUrl":103},"scripts\u002Fdetect_plugins.mjs","SCRIPT","脚本",2842,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002Fscripts\u002Fdetect_plugins.mjs",[105,124,145,162,182,207],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":119,"publishedAt":44},"01M6C22DH5PD92NQAX0Y2X0YA6","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[111,114],{"categoryNo":112,"categoryName":113,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[120,121,28,122,123],"writing","writing for agents","editing","documents",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":134,"publishedAt":44},"01M6C22APBD07T1MBH301FJKA6","wp-rest-api","Use when building, extending, or debugging WordPress REST API endpoints\u002Froutes: register_rest_route, WP_REST_Controller\u002Fcontroller classes, schema\u002Fargument validation, permission_callback\u002Fauthentication, response shaping, register_rest_field\u002Fregister_meta, or exposing CPTs\u002Ftaxonomies via show_in_rest.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-rest-api\u002FSKILL.md",[130,131],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":132,"categoryName":133,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000030","开发工程师",[135,34,136,43,137,138,28,31,32,139,140,33,141,142,143,144,40,42],"REST","wp rest api","controller","schema","shaping","php","Meta","validation","authentication","debugging",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":44},"01M6C228355FYPDSH157J7962Z","wp-project-triage","Use when you need a deterministic inspection of a WordPress repository (plugin\u002Ftheme\u002Fblock theme\u002FWP core\u002FGutenberg\u002Ffull site) including tooling\u002Ftests\u002Fversion hints, and a structured JSON report to guide workflows and guardrails.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-project-triage\u002FSKILL.md",[],[152,153,31,154,32,43,155,156,140,42,33,40,25,157,158,159,160,161,28],"wp project triage","triage","core","site","json","Guardrails","repository","report","guide","version",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":171,"publishedAt":44},"01M6C225595ZG6MPCRGKA7FSNZ","wp-plugin-directory-guidelines","Use when reviewing WordPress plugins for GPL compliance, checking license headers or compatibility, evaluating upsell\u002Ffreemium\u002Ftrialware patterns, validating plugin naming or trademark rules, checking plugin slugs, understanding why a plugin was rejected from WordPress.org, or answering any question about the 18 WordPress.org Plugin Directory guidelines — even if the user doesn't mention 'guidelines' explicitly.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-plugin-directory-guidelines\u002FSKILL.md",[168],{"categoryNo":169,"categoryName":170,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000037","律师与法务",[172,173,25,174,175,176,177,140,178,179,180,181,42,28],"wp plugin directory guidelines","directory","guidelines","question","user","Rules","why","compliance","plugins","license",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":192,"publishedAt":44},"01M6C21YFXNYHM5B9ZN6JGCAJW","wp-performance","Use when investigating or improving WordPress performance (backend-only agent): profiling and measurement (WP-CLI profile\u002Fdoctor, Server-Timing, Query Monitor via REST headers), database\u002Fquery optimization, autoloaded options, object caching, cron, HTTP API calls, and safe verification.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-performance\u002FSKILL.md",[188,189],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":190,"categoryName":191,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[193,194,195,196,197,42,198,43,199,28,200,201,202,140,203,34,135,204,205,206],"wp performance","performance","doctor","monitor","http","safe","verification","backend","profile","profiling","cron","Optimization","server","database",{"skillNo":208,"name":209,"nameZh":6,"description":210,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":211,"categories":212,"keywords":219,"publishedAt":44},"01M6C21VGHXMBDNDRZJGDW63CE","wp-patterns","Generate technically correct, design-distinctive WordPress block patterns. Use when creating block patterns, starter page patterns, template patterns, template part patterns, or improving pattern design quality. Covers pattern registration (PHP headers, auto\u002Fmanual), block markup syntax, theme.json design tokens, categories, template types, accessibility, and i18n\u002Fescaping.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FCimo\u002Fblob\u002Fdevelop\u002F.cursor\u002Fskills\u002Fwp-patterns\u002FSKILL.md",[213,216],{"categoryNo":214,"categoryName":215,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":217,"categoryName":218,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000032","设计师",[220,221,222,223,28,224,225,226,156,227,140,228,229,230,42,231],"wp patterns","quality","auto","html","syntax","page","template","correct","file","generate","accessibility","design"]