フィルター

フィルターは、特定のデータを変更するために使用されます。Hexoはデータをフィルターに順番に渡し、フィルターはデータを次々と変更します。この概念はWordPressから借用しました。

概要

hexo.extend.filter.register(type, function() {
// User configuration
const { config } = this;
if (config.external_link.enable) // do something...

// Theme configuration
const { config: themeCfg } = this.theme;
if (themeCfg.fancybox) // do something...

}, priority);

priority(優先度)を定義できます。priorityの値が低いほど、早く実行されます。デフォルトのpriorityは10です。ユーザーが設定で指定できるユーザー設定可能な優先度値(例:hexo.config.your_plugin.priority)を使用することをお勧めします。

フィルターの実行

hexo.extend.filter.exec(type, data, options);
hexo.extend.filter.execSync(type, data, options);
オプション 説明
context コンテキスト
args 引数。これは配列でなければなりません。

各フィルターに渡される最初の引数はdataです。次のフィルターに渡されるdataは、新しい値を返すことで変更できます。何も返されない場合、データは変更されません。argsを使用して、フィルターで他の引数を指定することもできます。例えば

hexo.extend.filter.register("test", function (data, arg1, arg2) {
// data === 'some data'
// arg1 === 'foo'
// arg2 === 'bar'

return "something";
});

hexo.extend.filter.register("test", function (data, 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);

// Unregister a filter which is registered with named function

const filterFn = (data) => {
data = "something";
return data;
};
hexo.extend.filter.register("example", filterFn);

hexo.extend.filter.unregister("example", filterFn);
// Unregister a filter which is registered with commonjs module

hexo.extend.filter.register("example", require("path/to/filter"));

hexo.extend.filter.unregister("example", require("path/to/filter"));

フィルター一覧

Hexoで使用されるフィルターのリストを以下に示します。

before_post_render

投稿がレンダリングされる前に実行されます。実行手順については、投稿のレンダリングを参照してください。

たとえば、タイトルを小文字に変換するには

hexo.extend.filter.register("before_post_render", function (data) {
data.title = data.title.toLowerCase();
return data;
});

after_post_render

投稿がレンダリングされた後に実行されます。実行手順については、投稿のレンダリングを参照してください。

たとえば、@usernameをTwitterプロファイルへのリンクに置き換えるには

hexo.extend.filter.register("after_post_render", function (data) {
data.content = data.content.replace(
/@(\d+)/,
'<a href="http://twitter.com/$1">#$1</a>',
);
return 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) {
locals.now = Date.now();
return 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 () {
// remove some other temporary files
});

server_middleware

サーバーにミドルウェアを追加します。 appConnectインスタンスです。

たとえば、レスポンスヘッダーに`X-Powered-By:Hexo`を追加するには

hexo.extend.filter.register("server_middleware", function (app) {
app.use(function (req, res, next) {
res.setHeader("X-Powered-By", "Hexo");
next();
});
});