Standing on the Shoulder of Linus

Home / 2011 / 11月 / 12 / PHPTAL でカスタムモディファイアを利用して WordPress ショートコード対応にする

PHPTAL でカスタムモディファイアを利用して WordPress ショートコード対応にする

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 テンプレートでも、ショートコードが有効になります。

関連

Posted in php | Tagged PHPTAL, テンプレート, デザイン
← 閉じ込められた23人 THE PARADOX OSC 東京 2011参加しました →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • 問い合わせフォーム改善: 選択肢により条件分岐し、項目の表示非表示を変更する
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.