Z-Blog 与 WordPress 插件机制对比:钩子设计的两种思路

· zblog · 阅读 14
摘要

两个系统都有钩子,但设计哲学的差异会直接影响插件怎么写、以及迁移时有多痛。命名与定位WP 用 add_action / add_filter 两个函数区分“执行动作”和“过滤数据”。Z-Blog 统称 Filter,靠命名约定(带 Core

两个系统都有钩子,但设计哲学的差异会直接影响插件怎么写、以及迁移时有多痛。

命名与定位

WP 用 add_action / add_filter 两个函数区分“执行动作”和“过滤数据”。Z-Blog 统称 Filter,靠命名约定(带 Core_Save、Validate 的是过滤器)来推断。

区别在于:WP 的类型是强制的,用错函数会报错或行为异常;Z-Blog 靠约定,用错了不报错,只是返回值得不到利用。

钩子数量

WP 核心有上千个钩子,几乎每一步都能插手;Z-Blog 的核心钩子数量少一个量级,覆盖主要流程但不细碎。

结果是:WP 插件可以做到很细的局部替换,Z-Blog 插件往往要整块接管某个流程。

配置存储

对比项WordPressZ-Blog
存储方式wp_options 表c_option.php 或 Config 对象
读写 APIget_option/update_option$zbp->Config()/SaveConfig()
自动加载是,全量缓存按插件分别序列化

迁移时的实际痛点

WP 插件逻辑迁到 Z-Blog,最容易出问题的是“依赖细分钩子做的事”。比如想在文章保存前校验某个字段,WP 有 wp_insert_post_data 可以只改数据不落库;Z-Blog 只能在 Filter_Plugin_Post_Core_Save 里改,那时对象已经准备好要写入了,校验失败要自己抛异常或置空标题来阻止。

反过来,Z-Blog 的 $zbp->LoadLanguage() 这类全局方法在 WP 里没有对应物,习惯后会觉得很方便。