插件开发指南

更新于 2026-09-17 03:14:14 4 次浏览

插件目录结构

plugins/myplugin/
├── plugin.json         # 插件元数据(必需)
├── plugin.php          # 插件入口(必需)
└── ...                 # 插件自己的资源、模板等

plugin.json

{
    "name": "我的插件",
    "slug": "myplugin",
    "version": "1.0.0",
    "description": "插件功能简介",
    "author": "作者名",
    "default_settings": {
        "enabled_badge": { "type": "checkbox", "default": "1" }
    },
    "dependencies": {},
    "changelog": [
        { "version": "1.0.0", "notes": "首个版本" }
    ]
}
  • 必填字段nameslugversiondescriptionauthor
  • slug 必须为小写字母/数字/下划线(2~50 位)且与目录名完全一致;
  • version 遵循 SemVer(如 1.0.0);
  • default_settings 声明的配置项会出现在后台插件设置中。

插件入口类

plugin.php 定义入口类,类名为 slug 的帕斯卡形式加 Plugin 后缀(如 mypluginMypluginPlugin),继承 PluginBase

class MypluginPlugin extends PluginBase
{
    public function __construct($plugin)
    {
        parent::__construct($plugin);
        // 监听系统钩子
        Hook::listen(Hook::ARTICLE_VIEW_AFTER, [$this, 'onArticleView']);
    }

    public function onArticleView($article)
    {
        // 文章被浏览后的处理逻辑
    }
}

系统加载插件时读取 plugin 表中启用的记录,require 对应 plugin.php 并实例化入口类——构造函数里完成全部钩子注册。

系统钩子

钩子中心(core/lib/Hook.php)按对象分组,命名统一为 对象_动作_before/after

  • 用户user_login_before/after/faileduser_register_before/afteruser_profile_update_*user_password_change_*user_delete_*user_ban_*user_follow_* 等;
  • 文章article_create_*article_update_*article_delete_*article_publish_*article_view_*article_like_*article_favorite_*article_search_* 等;
  • 评论comment_add_*comment_approve_*comment_reply_*comment_like_* 等;
  • 页面/分类/标签page_create_*category_update_*tag_delete_* 等;
  • 系统system_initsystem_shutdownsystem_cache_clearsystem_backup_*system_config_updatesystem_cronsystem_error
  • 上传file_upload_before/after/errorfile_delete_*
  • 通知/邮件send_notificationemail_send_*
  • 后台admin_login_*admin_logout_*
  • 配置扩展admin_config_collect_custom(插件把自定义设置项注入后台保存流程)。

完整常量清单以 Hook.php 源码为准。

模板挂载点

主题模板中的 {plugin_hook name="自定义钩子"} 标签会执行该钩子上注册的插件逻辑并输出返回内容——插件可借此向页面注入组件(侧边栏挂件、统计代码等)。

调试与日志

后台「钩子管理」可查看每个钩子的触发日志、手动测试钩子、清理日志,是排查插件执行时序问题的首选工具。

打包上架

压缩插件目录(顶层目录名与 slug 一致)后,可提交到官网应用市场。上架前请确认:元数据完整、PHP 语法通过、禁用/启用/卸载流程无残留。