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]
などと書くと
<a href="http://example.com/">hoge</a>
に変換してくれる。
以下、解説。
#と言っても、ソース見てもらえば丸分かりだと思いますが (^^;;
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行目。
これだけで、おしまいです。