
如果说主题开发解决的是“站点怎么长”,那插件开发更像是在解决:
站点某个流程怎么接管、怎么增强、怎么复用。
但很多人第一次学 Z-BlogPHP 插件时,会被几个点同时卡住:
plugin.xml 是做什么的RegisterPlugin(...) 到底注册了什么Add_Filter_Plugin(...) 到底把逻辑挂到了哪main.php 又为什么经常一起出现这篇就专门把插件开发最基础的骨架讲清楚。
主题开发和插件开发最根本的差异,不是目录不同,而是职责不同。
主题更偏:
插件更偏:
所以你学插件开发时,脑子里要先切换一个视角:
你不是在“写一个页面”,而是在“接管一个系统阶段”。
zb_users/plugin/<plugin>/
├── plugin.xml
├── include.php
├── main.php
├── includes/
└── vendor/
你第一次做插件,不一定全都用上。
但至少这三个位置,最好尽早理解:
plugin.xmlinclude.phpmain.phpplugin.xml 是插件元信息,不是行为实现层它和主题里的 theme.xml 很像,主要负责插件的基础身份信息。
通常包括:
一个简化示意大概像这样:
<?xml version="1.0" encoding="utf-8"?>
<plugin version="php">
<id>MyPlugin</id>
<name>My Plugin</name>
<note>一个用于演示 Hook 注册的插件</note>
<path>main.php</path>
<level>1</level>
</plugin>
这里最重要的不是字段多复杂,而是:
include.php 才是插件真正开始生效的地方如果你想知道一个插件“到底从哪开始挂进系统”,答案通常就是:
include.php
因为插件最关键的两步,通常都会在这里开始:
最常见的入口骨架就是:
RegisterPlugin("MyPlugin", "ActivePlugin_MyPlugin");
function ActivePlugin_MyPlugin() {
Add_Filter_Plugin('Filter_Plugin_Zbp_Load', 'MyPlugin_Init');
}
function MyPlugin_Init() {
}
这段代码要怎么理解?
RegisterPlugin(...)它的意思可以简单理解成:
告诉系统,这个插件的激活入口函数是谁。
ActivePlugin_MyPlugin()这个函数通常是插件启用后开始挂接逻辑的地方。
Add_Filter_Plugin(...)这个才是把具体行为挂到某个系统阶段里去。
也就是说,真正的关键不只是“写一个函数”,而是:
把函数挂到对的阶段。
Add_Filter_Plugin(...) 是插件开发的核心因为 Z-BlogPHP 的插件机制,很大一部分就是靠 Hook 驱动的。
这意味着:
这也是插件比硬改核心更稳的原因。
比如你想做的事情可能是:
这些都不是“重写整个系统”,而是“找到正确 Hook 再挂进去”。
main.php 在插件里通常负责什么很多人第一次看插件,会误以为 main.php 是主逻辑文件。
其实它更像:
插件的后台管理入口。
最常见的职责包括:
所以一个插件的职责通常是这样分:
plugin.xml:身份信息include.php:挂接逻辑main.php:后台设置和管理只要这层分工一清楚,插件目录就不会越写越乱。
第一次写插件,不建议一上来就做特别重的东西。
更稳的起点是做一个很小但路径完整的功能。
比如:
这类需求的好处是:
它们保存方式很像,都是:
$zbp->Config('AppID')->SomeKey = $value;
$zbp->SaveConfig('AppID');
但职责不同。
也就是说:
和功能流程绑定的,更像插件配置。
和站点外观绑定的,更像主题配置。
很多新手不是不会写函数,而是不知道函数该挂哪。
你可以先按需求类别判断:
优先关注:
Filter_Plugin_ViewList_CoreFilter_Plugin_ViewPost_Core优先关注:
Filter_Plugin_ViewList_TemplateFilter_Plugin_ViewPost_Template优先关注:
Edit_Response 系列 Hook优先关注:
Filter_Plugin_PostComment_CoreFilter_Plugin_CheckComment_CoreFilter_Plugin_Error_Handler优先关注:
Filter_Plugin_Zbp_PreLoadFilter_Plugin_Zbp_Load你会发现,插件开发最重要的技能之一,不是写多复杂,而是:
先把需求归类,再找 Hook 家族。
这是很多项目后期都会遇到的问题。
如果某段逻辑开始出现这些特征,就该认真考虑插件化:
反过来,如果某段逻辑:
那它大概率还是主题职责。
plugin.xml 只是建了,但没建立清晰入口结果后面自己都找不到插件从哪开始生效。
前期还好,后面会越来越难读。
更好的起点是:
最后职责会变得很拧巴。
这和主题配置项是同一个坑型。
效率会很低。
我更建议你用这个顺序练手:
plugin.xmlinclude.phpRegisterPlugin(...)main.php只要这条链路你跑通一次,后面再学评论插件、后台扩展插件、API 插件,都会容易很多。
Z-BlogPHP 插件开发最重要的,不是先记住几十个 Hook 名字,而是先建立这套骨架理解:
plugin.xml 负责身份include.php 负责注册和挂接main.php 负责后台设置和管理RegisterPlugin(...) 负责告诉系统入口Add_Filter_Plugin(...) 负责把逻辑挂到正确阶段你只要先把这套配合关系想明白,插件开发就已经真正入门了。
下一篇我们专门讲 Hook 怎么找、怎么用,把这套挂接思路再往前推进一步。
发表评论: