やったこと

webサービスを作るときに考えたことを垂れ流します

【Wordpress】「functions.php」をいじってテストテンプレートを表示する!

ワードプレスで functions.php にコードを追加して、テストテンプレートを表示させる仕組みを作ります。

つまり、どういう事かと言うとですね・・。

①「http://hogehoge.com/」というサイトがあったとします。

②ここに「http://hogehoge.com/test_page/」みたいなテスト表示用のディレクトリを追加します(トップページの配下に追加します)

③この「/test_page/」にアクセスすると、自分が現在調整しているテンプレート(sample.php)を表示することできます。

こういうことがやりたい訳ですよ・・。

コードは以下です。これを「functions.php」に追加します。

add_action('init', 'add_test_page');
function add_test_page(){
  add_rewrite_endpoint('test_page', EP_ROOT);
  flush_rewrite_rules();
}

add_filter('query_vars', 'add_query_vars');
function add_query_vars($vars){
    $vars[] = "test_page";
    return $vars;
}

add_action('template_redirect', 'test_template_redirect');
function test_template_redirect() {
    global $wp_query;
    if (isset($wp_query->query['test_page'])) {
      include_once('sample.php');
      exit;
    }
}

これで「sample.php」をテスト表示することができます。

訳あって管理画面にアクセスできない人がテストページのデザイン修正するときに、この方法が使えると思います。

ところで、上記の「flush_rewrite_rules()」ですが、あまり連続的に呼び出すと、とても負荷が大きく、いろいろ不具合をもたらすのだそうな。

だから呼ぶのは一度だけでいいです。一回ページをロードしたら、下記のようにコメントアウトしてしまうといいと思います。

/*
add_action('init', 'add_test_page');
function add_test_page(){
  add_rewrite_endpoint('test_page', EP_ROOT);
  flush_rewrite_rules();
}
*/

add_filter('query_vars', 'add_query_vars');
function add_query_vars($vars){
    $vars[] = "test_page";
    return $vars;
}

add_action('template_redirect', 'test_template_redirect');
function test_template_redirect() {
    global $wp_query;
    if (isset($wp_query->query['test_page'])) {
      include_once('sample.php');
      exit;
    }
}


テスト確認が終わったら上記コードは消してしまいましょう。
(最後にもう一度「 flush_rewrite_rules()」を呼んで、追加した情報を消して元通りにしてあげるといいかも)

以上!