自作のプラグインで生成するページが既存のテンプレートにマッチしなかったり、ページの種類によってテンプレートを変えたいなーなんて事、ありますよね。
page.php などの中でさらに分岐させても良いのですが、それではロジックとビューが混在してしまうためロジックがプラグインだったりするとテーマとプラグインに依存関係が生まれて使い勝手が悪くなってしまってイマイチです。
そんなときはフィルタ関数で呼び出すテンプレートファイルを変えてしまいましょう。
大体こんな感じ。
function pageSnacher( $template ){ if( preg_match( '/^\/hoge$/', getenv( 'REQUEST_URI' ) ) ) $template = TEMPLATEPATH . '/hoge.php'; return $template; } add_filter( 'page_template', 'pageSnatcher' );
URI が /hoge だった場合にテーマのディレクトリにある hoge.php がテンプレートファイルとして読み込まれます。
page_template は wp-includes/template-loader.php で is_page() が true を返したときに呼び出されるフックです。
よって、init フックとかで add_filter() しても意味がなかったりしますので気をつけてください。
それぞれのテンプレートで呼び出されるフックは wp-includes/theme.php 辺りを読めば大体わかると思います。
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://spais.jp/note/wordpress-%e3%81%ab%e7%8b%ac%e8%87%aa%e3%81%ae%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e8%bf%bd%e5%8a%a0%e3%81%99%e3%82%8b/2009-03-26/trackback
- トラックバックの送信元リスト
- Wordpress に独自のテンプレートを追加する - SPaiS より