刚拆完第三个插件才发现:我的目录结构一直在"假装专业"
上周帮朋友 review 一个练手插件,打开 zip 差点没笑出声——全部代码塞在一个 800 行的主文件里,assets 和语言包跟 PHP 混成一锅粥。但笑完就沉默了,因为两年前的我也是这样,还觉得自己"结构挺清晰"。
现在我的目录长这样,不一定最优,但确实救过我的命:
my-plugin/ ├── my-plugin.php // 唯一入口,只做"接线员" ├── bootstrap.php // 实际初始化,解耦出来方便单元测试 ├── src/ │ ├── Admin/ // 后台相关:菜单、设置页、Metabox │ ├── Frontend/ // 前台:短码、小工具、public 钩子 │ ├── Core/ // 跨层工具:自动加载、容器、常量 │ └── Database/ // 迁移、查询封装、版本控制 ├── assets/ │ ├── css/src/ // SCSS 源文件,不是直接 enqueue 的 │ ├── js/src/ // Webpack 入口,分 admin/frontend │ └── images/ ├── languages/ // .pot 由 wp-cli 生成,别手写 ├── tests/ // 不是 test/,WordPress 核心用了复数 └── vendor/ // Composer,但 production 要 --no-dev
重点说入口文件。很多人把 `register_activation_hook` 直接写在主文件头部,激活时爽了,但后面想测激活逻辑就得整包加载。我现在把钩子注册也甩给 `bootstrap.php`,主文件只剩 20 行:
```php