デザインカスタマイズをしていくにあたって、便宜的に改修中のデザイン(テンプレート)と、実運用を切り替えられる仕組みがあると良いなと思い、調査しました。

その結果、切り替えて確認できるのがトップページに限定されるものの、なんとか近しいハックがわかったので、番外編として残しておく。

まず、通常のキャッシュ化(または過去アーカイブ、カテゴリ表示等の非キャッシュ表示)には存在しないGETパラメータを仕様追加した。

template=TestTemplateとする。(TestTemplateは適宜読み替えてください)
→ http://www.hoge.com/?template=TestTemplate
  とすることでテスト用のテンプレート表示が可能。

そのうえで、テンプレートを決定する関数(2つ)をGETパラメータ有無により挙動が変わるような仕掛け。

◆wp-include/theme.php
 下記の2関数を元の処理から変更する。テンプレート名をハードコーディング
 しているので、適宜変更して欲しい。

function get_template() {
global $_GET;

if ( $_GET[‘template’] == “TestTemplate” ) {
return apply_filters(‘template’, $_GET[‘template’]);
} else {
return apply_filters(‘template’, get_option(‘template’));
}
}

function get_stylesheet() {
global $_GET;
if ( $_GET[‘template’] == “TestTemplate” ) {
return apply_filters(‘stylesheet’, $_GET[‘template’]);
} else {
return apply_filters(‘stylesheet’, get_option(‘stylesheet’));
}
}

◆補足
 本来であればGETパラメータに応じたディレクトリ(テンプレート)の存在有無を
 チェックした上で、動的にテンプレート名を決定指定ところだったが、どうも
 テンプレートのBASEディレクトリを決定するためのdefine(TEMPLATEPATH)が、
 実体としては
    get_template_directory()
 という関数で、その中でさらに上記のget_template()をコールしているため、
 存在確認のためのBASEディレクトリにdefineを用いると、多重コールとなって、
 意図した動作をしない(BASEディレクトリが未定義となる)ことがわかった。

 というわけで、存在チェックを外している。