WordPress 2.5.x のショートコードAPI

WordPress 2.5 以降でサポートされた ショートコードAPI が便利すぎて仕方ない。
VideoPop+ を改修したときに調べたのだが、かなり使い勝手が良い。
要は投稿記事中に書いた [my-shortcode foo="bar"]content[/my-shortcode] みたいな文字列を、好きなように置換して表示することができる仕掛けだ。

投稿記事中にソースを書く際、手動で実体参照に変換することがあるのだが、これを自動でやるためのショートコードを作成したのでメモ。

 /* HTML Entity Encode */
function html_entity_encode_handler($atts, $content = null) {
 extract( shortcode_atts( array(
      'quote_style'   => ENT_COMPAT
     ,'charset'       => get_settings('blog_charset')
     ,'double_encode' => true
     ), $atts ) );

 switch(strtoupper($quote_style)){
 case 'ENT_COMPAT':  case 'COMPAT':   $quote_style = ENT_COMPAT;   break;
 case 'ENT_QUOTES':  case 'QUOTES':   $quote_style = ENT_QUOTES;   break;
 case 'ENT_NOQUOTES':case 'NOQUOTES': $quote_style = ENT_NOQUOTES; break;
 default: $quote_style = ENT_COMPAT; break;
 }

 switch(strtoupper($double_encode)){
 case 'TRUE':   $double_encode = true;   break;
 case 'FALSE':  $double_encode = false;  break;
 default: $double_encode = false; break;
 }

 return htmlentities($content, $quote_style, $charset, $double_encode);
}
add_shortcode('encode', 'html_entity_encode_handler');

たった、これだけで投稿記事中に
[encode]<a href="http://example.com/">hoge</a>[/encode] などと書くと
&lt;a href=&quot;http://example.com/&quot;&gt;hoge&lt;/a&gt; に変換してくれる。


以下、解説。
#と言っても、ソース見てもらえば丸分かりだと思いますが (^^;;

25行目はショートコードをハンドリングするための関数 add_shortcode() の呼び出し。
第一引数はショートコード名、第二引数はショートコードを変換する関数名。

24行目までが、ショートコードを変換するための関数。

3行目〜7行目は、ショートコードの属性を取得するための処理。
[encode quote_style="COMPAT" charset="UTF-8" double_encode="TRUE"]hogehoge[/encode]
のように書いたショートコードの属性を取得して、それぞれ $quote_style、$charset、$double_encode という変数にセット。
ショートコードに属性が設定されていなければ、shortcode_atts() の第一引数で指定した値で初期化。

取得してきた属性は文字列でセットされるので、それを変換しているのが 9〜20行目。

で、最後にショートコードタグで囲まれた文字列を htmlentities() 関数で変換して返しているのが22行目。

これだけで、おしまいです。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください