PHPTAL はテンプレートとして秀逸ですが、WordPress に適用しようとすると、content 出力で結構困ります。WordPress ではテンプレート出力時にショートコード実行するからです。
幸い、PHPTAL の機能で、カスタムモディファイアがあるので、こちらを利用すると、上手くいきました。
まず、カスタムモディファイアについての説明です。公式の Creating custom expression modifiers に説明がありますが、phptal_tales_money
のように、phptal_tales_モディファイア名
で指定できます。公式マニュアルでは、下記のような、出力を小数点2桁にする例が載っています。
function phptal_tales_money( $src, $nothrow ) { // remove spaces we do not require here $src = trim($src); return 'sprintf("%01.2f", '.phptal_tales($src, $nothrow).')'; }
これにならって、ショートコードを実行させます。the_content()
WordPress テンプレートタグ(post-template.php にある)を見ると、apply_filters('the_content',$content)
と str_replace(']]>', ']]>', $content)
があります。
apply_filters('the_content',$content)
は、ショートコードの実行等がフックされているフィルターです。
str_replace(']]>', ']]>', $content)
は、CDATA の閉じタグをエスケープします。
これら2つを適用するモディファイアは、下記のようになります。
function phptal_tales_thecontentfilter($src, $nothrow=false) { return "str_replace(']]>', ']]>', apply_filters('the_content',".phptal_tales($src,$nothrow)."))"; }
ちょっとややこしい書き方になっていますが、str_replace(']]>', ']]>', XXX)
の、XXX 部分がapply_filters('the_content',".phptal_tales($src,$nothrow).")
という入れ子になっています。
これを用いることで、PHPTAL テンプレートでも、ショートコードが有効になります。