拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
Movable Type用ShortCodeプラグイン・その11(複雑なショートコードのプラグイン)
ここまでのShortCodeプラグインの解説では、config.yamlファイルだけでショートコードのプラグインを作る方法を解説しました。
ただ、複雑な処理を行うショートコードだと、config.yamlファイルだけでは処理を記述しきれません。
その場合は、Perlでショートコードの処理を行うようにします。
第10回にlinkショートコードを改良する例を紹介しました。
ショートコードの処理をPerlで行う簡単な例として、このプラグインを書き換える方法を紹介します。
1.config.yamlファイルの書き換え
まず、config.yamlファイルを書き換えて、ショートコードの処理を行うPerlのサブルーチン名を指定します。
前日のプラグインでは、ショートコードの処理は、config.yamlファイルの「template:」の行で指定していました。
この「template:」の行の代わりに、以下のような行を入れます。
handler: $プラグインのID::モジュール名::サブルーチン名
「プラグインのID」には、config.yamlファイルの先頭の方の「id:」行で指定した値を入れます。
また、「モジュール名」と「サブルーチン名」で、ショートコードの処理を行うサブルーチンを指定します。
例えば、前日のlinkショートコードのプラグインで、ショートコードの処理を、「LinkShortCode::Plugin」モジュールの「link_short_code」サブルーチンで行うとします。
また、このプラグインのIDは、「LinkShortCode」でした(前日の記事のconfig.yamlファイルを参照)。
この場合は、config.yamlファイルに以下のような行を入れます。
handler: $LinkShortCode::LinkShortCode::Plugin::link_short_code
2.ショートコードの処理を行うサブルーチン
次に、ショートコードの処理を行うサブルーチンを作ります。
サブルーチンのパターンは、以下のようになります。
sub サブルーチン名 { my ($ctx, $args) = @_; # パラメータ群を得る my $params = $ctx->stash('__sc_params'); # ショートコードのブロック内のテキストを得る my $content = $ctx->stash('__sc_content'); テキストとパラメータから出力を求める処理 return 出力値 }
ショートコードにはパラメータを指定することができます。
それらのパラメータ群は、「$ctx->stash('__sc_params')」にハッシュリファレンスとして格納されます(「sc_params」の前には、アンダースコアを2つ書きます)。
上のリストでは、そのハッシュリファレンスを、変数$paramsに代入していますので、「$params->{パラメータ名}」で、そのパラメータの値を得ることができます。
また、ショートコードのブロック内のテキストは、「$ctx->stash('__sc_content')」に格納されます。
上のリストでは、テキストを変数$contentに代入しています。
テキストとパラメータを得たら、それらの値を処理して、ショートコードの出力値を生成します。
そして、その値をサブルーチンの戻り値として返します。
3.サブルーチンの例
ここまでの話に基づいて、linkショートコードの処理を行うモジュールを作ると、以下のようになります。
package LinkShortCode::Plugin; sub link_short_code { my ($ctx, $args) = @_; my $params = $ctx->stash('__sc_params'); my $content = $ctx->stash('__sc_content'); my $href = $params->{href}; my $out = '<a href="' . $href . '">' . $content . '</a>'; return $out; } 1;
6行目と7行目で、パラメータ群とテキストを、それぞれ変数$params/$contentに代入します。
また、9行目でhrefパラメータの値を変数$hrefに代入します。
そして、10行目で、$hrefと$contentの値を利用して出力を求め、その値を変数$outに代入します。
最後に、11行目で$outの値を戻り値として返します。
4.サンプルファイル
今日の記事で紹介したプラグインは、以下からダウンロードすることができます。
ダウンロードしたファイルを回答すると、「LinkShortCode」というフォルダができます。
このフォルダを、Movable Typeの「plugins」ディレクトリの中にアップロードすると、プラグインを実際に動作させることができます。