WordPress トップ階層でindex.phpとindex.htmlを共存させ、かつテーマカスタマイズ作業時にindex.html表示を回避する方法

WordPress トップ階層でindex.phpとindex.htmlを共存させ、かつテーマカスタマイズ作業時にindex.html表示を回避する方法

ネット、計算機のお伴

長いタイトルだが、そのまんまで小一時間悩んだ。

将来はWordPressで書き換える予定の静的サイトのページをごっそり、サイトにおいて閲覧に供しつつ、かつWordPressを同一階層に入れて地味に書き換え作業をするという必要が出てきたので、悩んでみた。

(1)サーバーのDirectoryindexの優先順位を,index.html,index.phpの順にしちゃえば、基本的な記事編集はできる。
なぜなら/wp-adminにアクセスしてあれこれする場合は、WordPressが優先されるわけで基本問題はない。しかし、テーマカスタマイズが出来ない。なぜなら、トップページのindex.htmlが読み込まれてしまうからだ。

(2)というわけで、index.php index.html順にした上で、利用しているテーマにテーマテンプレートを作り(例えばtemplate_toppage.php)、「投稿の属性」で同テンプレートを利用したページ(最初は空のダミーでOK)、そのページをテーマカスタマイズでトップページに指定してやればいい。かなり前の記事だけど

WordPress で index.html を共存させる方法 - dogmap.jp

Twitter で交流のある新潟系エンジニア @yutacar さんに、「ind…
dogmap.jp

上の解決方法がスマートだと判断した。

(3)上のページを参考に、次のようなコードを書く。

<?php
/*
Template Name: Top Page
*/
if (strpos($_SERVER['HTTP_REFERER'],"wp-admin"))
{
include_once('page.php');
}
else
{
readfile(ABSPATH . '/index.html');
}
?>

(4)こうしておくと、WordPressにログインしていて編集モードの場合は、WordPressテーマが読み込まれ、そうでなければindex.htmlが読み込まれるという分岐が可能となる。

(5)もうちょっとセキュリティのことも考えて、if条件を付加することと、.htaccessで編集中のWordPressにbasic認証程度はかけて外部閲覧が拒否することが必要だが、まあ基本的な考え方として(4)で解決できているので、嬉しい。

(6)テーマを付加するごとに、テーマディレクトリに上のファイルをコピーしなければならないので、これはWordPress APIのアクションフックを使って、テーマ追加時に同ファイルを自動コピーするように設定しておけば、幸せになれるはず。これはまだやってないけど。