过滤器用于修改某些指定的数据。 Hexo 将数据按顺序传递给过滤器,然后过滤器逐个修改数据。 这个概念是从 WordPress 借鉴的。
概要
hexo.extend.filter.register(type, function() { |
您可以指定过滤器的优先级 priority
。 priority
值越低,过滤器会越早执行。 默认的 priority
是 10。 我们建议提供配置选项如 hexo.config.your_plugin.priority
、让用户自行决定过滤器的优先级。
执行过滤器
hexo.extend.filter.exec(type, data, options); |
选项 | 描述 |
---|---|
context |
內容 |
args |
参数。 必须为数组。 |
data
会作为第一个参数传入每个过滤器。 而您可以在过滤器中通过返回值改变下一个过滤器中的 data
。 如果什么都没有返回的话则会保持原本的 data。 您还可以使用 args
指定过滤器的其他参数。 举例来说:
hexo.extend.filter.register("test", function (data, arg1, arg2) { |
您也可以使用以下方法来执行过滤器:
hexo.execFilter(type, data, options); |
移除过滤器
hexo.extend.filter.unregister(type, filter); |
示例
// 移除一个使用具名函数注册的过滤器 |
// 移除一个使用 CommonJS 模块注册的过滤器 |
过滤器列表
以下是 Hexo 所使用的过滤器。
before_post_render
在文章开始渲染前执行。 您可以参考 文章渲染 以了解执行顺序。
举例来说,把标题转为小写:
hexo.extend.filter.register("before_post_render", function (data) { |
after_post_render
在文章渲染完成后执行。 您可以参考 文章渲染 以了解执行顺序。
举例来说,把 @username
取代为 Twitter 的开发者链接。
hexo.extend.filter.register("after_post_render", function (data) { |
before_exit
在 Hexo 即将结束时执行,也就是在 hexo.exit
被调用后执行。
hexo.extend.filter.register("before_exit", function () { |
before_generate
在生成器解析前执行。
hexo.extend.filter.register("before_generate", function () { |
after_generate
在生成完成后执行。
hexo.extend.filter.register("after_generate", function () { |
template_locals
修改模板的 局部变量。
举例来说,在模板的局部变量中新增当前时间:
hexo.extend.filter.register("template_locals", function (locals) { |
after_init
在 Hexo 初始化完成后执行,也就是在 hexo.init
执行完成后执行。
hexo.extend.filter.register("after_init", function () { |
new_post_path
用来决定新建文章的路径,在建立文章时执行。
hexo.extend.filter.register("new_post_path", function (data, replace) { |
post_permalink
用于确定帖子的永久链接。
hexo.extend.filter.register("post_permalink", function (data) { |
after_render
在渲染后执行。 您可以参考 渲染 以了解更多信息。
after_clean
在使用hexo clean
命令删除生成的文件和缓存后执行。
hexo.extend.filter.register("after_clean", function () { |
server_middleware
向服务器添加中间件(Middleware)。 app
是一个 Connect 实例。
举例来说,在响应头中新增 X-Powered-By: Hexo
。
hexo.extend.filter.register("server_middleware", function (app) { |