# 過濾器(Filter)
過濾器用于修改特定文件,Hexo 將這些文件依序傳給過濾器,而過濾器可以針對文件進行修改,這個概念借鑒自 [WordPress](http://codex.wordpress.org/Plugin_API#Filters)。
## 概要
```
hexo.extend.filter.register(type, function{}, priority);
```
您可以指定過濾器的優先級 `priority`,`priority` 值越低,過濾器會越早執行,默認的 `priority` 是 10。
## 執行過濾器
```
hexo.extend.filter.exec(type, data, options);hexo.extend.filter.execSync(type, data, options);
```
| 選項 | 描述 |
| --- | --- |
| `context` | Context |
| `args` | 參數。必須為數組。 |
`data` 會作為第一個參數傳入每個過濾器,而您可以在過濾器中通過返回值改變下一個過濾器中的 `data`,如果什么都沒有返回的話則會保持原本的 `data`。您還可以使用 `args` 指定過濾器的其他參數。舉例來說:
```
hexo.extend.filter.register('test'functiondata, arg1, arg2{ // data === 'some data'
// arg1 === 'foo'
// arg2 === 'bar'
return'something'
});hexo.extend.filter.register('test'functiondata, arg1, arg2{ // data === 'something'
});hexo.extend.filter.exec('test''some data'
args: ['foo''bar'
});
```
您也可以使用以下方法來執行過濾器:
```
hexo.execFilter(type, data, options);hexo.execFilterSync(type, data, options);
```
## 移除過濾器
```
hexo.extend.filter.unregister(type, filter);
```
## 過濾器列表
以下是 Hexo 所使用的過濾器。
### before_post_render
在文章開始渲染前執行。您可以參考 [文章渲染](posts.html#渲染) 以了解執行順序。
舉例來說,把標題轉為小寫:
```
hexo.extend.filter.register('before_post_render'functiondata{ data.title = data.title.toLowerCase(); return
});
```
### after_post_render
在文章渲染完成后執行。您可以參考 [文章渲染](posts.html#渲染) 以了解執行順序。
舉例來說,把 `@username` 取代為 Twitter 的開發者鏈接。
```
hexo.extend.filter.register('after_post_render'functiondata{ data.content = data.content.replace(/@(\d+)/'<a href="http://twitter.com/$1">#$1</a>'
return
});
```
### 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
修改模板的 [局部變量](../docs/variables.html)。
舉例來說,在模板的局部變量中新增當前時間:
```
hexo.extend.filter.register('template_locals'functionlocals{ locals.now = Date
return
});
```
### after_init
在 Hexo 初始化完成后執行,也就是在 `hexo.init` 執行完成后執行。
```
hexo.extend.filter.register('after_init'function{ // ...
});
```
### new_post_path
用來決定新建文章的路徑,在建立文章時執行。
```
hexo.extend.filter.register('new_post_path'functiondata, replace{ // ...
});
```
### post_permalink
用來決定文章的永久鏈接。
```
hexo.extend.filter.register('post_permalink'functiondata{ // ...
});
```
### after_render
在渲染后執行,您可以參考 [渲染](rendering.html#after_render_過濾器) 以了解更多信息。
### server_middleware
新增服務器的 Middleware。`app` 是一個 [Connect](https://github.com/senchalabs/connect) 實例。
舉例來說,在響應頭中新增 `X-Powered-By: Hexo`。
```
hexo.extend.filter.register('server_middleware'functionapp{ app.use(functionreq, res, next{ res.setHeader('X-Powered-By''Hexo'
next(); });});
```
- 文檔
- 開始使用
- 概述
- 建站
- 配置
- 指令
- 遷移
- 基本操作
- 寫作
- Front-matter
- 標簽插件(Tag Plugins)
- 資源文件夾
- 數據文件
- 服務器
- 生成文件
- 部署
- 自定義
- 永久鏈接(Permalinks)
- 主題
- 模版
- 變量
- 輔助函數(Helpers)
- 國際化(i18n)
- 插件
- 其他
- 問題解答
- 貢獻
- API
- 核心
- 概述
- 事件
- 局部變量
- 路由
- Box
- 渲染
- 文章
- 腳手架(Scaffold)
- 主題
- 擴展
- 控制臺(Console)
- 部署器(Deployer)
- 過濾器(Filter)
- 生成器(Generator)
- 輔助函數(Helper)
- 遷移器(Migrator)
- 處理器(Processor)
- 渲染引擎(Renderer)
- 標簽插件(Tag)