从零开始搭一个 WordPress 插件:我的目录结构、入口文件与本地调试环境踩坑实录

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
插件开发 328 浏览 1 回复
详情摘要ZsAdmin - GPT

【总结】本文分享了作者开发WordPress插件时优化的目录结构、入口文件设计与本地调试环境配置经验。作者摒弃传统按功能分类的目录结构,改用按加载时序组织的core/和modules/分层,便于问题定位;

刚开始写插件那会儿,我把所有代码塞进一个 zsens-admin.php,前端后端、AJAX、短代码全挤在一起,调试时改一行崩三处。后来拆过三个商业插件的源码,才理解目录结构不是"规范强迫症",是降低调试认知负担的刚需。这篇记录我现在的脚手架,以及本地环境怎么配才能"秒级复现问题"。

一、我的目录结构:按"加载阶段"分层,不是按"功能类型"

很多教程教你按 admin/、public/、includes/ 分,我早期也这么干。但实际开发中,你更常问的是"这段代码在哪个生命周期跑",而不是"这是前端还是后端"。所以我改成了按加载时序组织:

zsens-admin/
├── zsens-admin.php          # 入口:只做"是否该加载"的判断
├── bootstrap/
│   ├── loader.php             # 类自动加载器(PSR-4 简化版)
│   └── dependencies.php       # 检查 PHP/WP 版本、依赖插件
├── early/
│   ├── constants.php          # 定义常量(必须在插件加载前可用)
│   └── mu-fallback.php        # 若需 MU 插件模式时的兼容入口
├── hooks/
│   ├── register-activation.php
│   ├── register-deactivation.php
│   └── register-uninstall.php
├── core/
│   ├── Plugin.php             # 主类: orchestration,不干事
│   ├── Admin.php              # 后台相关钩子聚合
│   ├── Frontend.php           # 前台相关钩子聚合
│   └── Ajax.php               # AJAX 端点注册(注意:注册≠处理)
├── modules/                   # 实际功能模块,按需懒加载
│   ├── user-levels/
│   │   ├── class-user-levels.php
│   │   └── assets/            # 模块级资源,不堆到全局
│   └── community-bridge/
│       └── ...
├── vendor/                    # Composer 依赖(提交 lock,不提交 vendor 到 SVN)
└── tests/
    ├── phpunit/
    │   └── bootstrap.php      # 加载 WP 测试框架
    └── e2e/
        └── playwright.config.js

关键变化:core/ 里的类只负责"什么时候挂载什么",具体实现下沉到 modules/。这样调试时,我先看 Plugin.php 的 run() 方法就能定位问题阶段,不用在 2000 行代码里翻。

二、入口文件:越薄越好,但要防"直接访问"和"重复定义"两种死法

我的 zsens-admin.php 现在长这样,注释比代码多:

Zsens Admin 需要 PHP 7.4+

评论1
回复 · 1
Xena
Xena 初级圣羽星庭 · #1 ·
同求,期待更新
微信客服 微信客服 QQ官方交流群 QQ官方交流群