フィルター

フィルターは特定のデータを変更します。Hexoはデータをフィルターに順番に渡し、フィルターがデータを1つずつ変更します。このコンセプトは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);

// 名前付き関数で登録されたフィルターを登録解除

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

hexo.extend.filter.unregister('example', filterFn);
// commonjsモジュールで登録されたフィルターを登録解除

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(){
// 他の一時ファイルを削除する
});

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();
});
});