質問: こんにちは。いつもお世話になっております。 現在wordpressで一部ページをCMS化したサイトを作成しています。 理想とするディレクトリ構成がなかなか上手くできずに困っております。 どのようにすれば実現できるのか、ご助言いただきたく投稿いたします。 ### 実現したいディレクトリ構成 ``` root┬─/_cms/─/wp/─/wp-config... │ ├─/post1/ │ ├─/page1/ │ ├─/hoge/┬─index.html (.phpならできるが...) │ ├─/post2/ │ └─/page2/─/page3/ (略) └index.html (.phpならできるが...) ``` * /_cms/ 以下にwpをインストール * /post1/は投稿タイプとしてルート直下のサブディレクトリで表示させたい * /page1/は固定ページとしてルート直下のサブディレクトリで表示させたい * /post2/はカスタム投稿タイプとして、/hoge/以下のサブディレクトリで表示させたい * /page2/は固定ページとして、/hoge/以下のサブディレクトリで表示させたい * /page3/は固定ページとして、/page2/以下のサブディレクトリで表示させたい * ルートおよび/hoge/のトップページをindex.htmlにしたい ### 現在行っていること * インストールとは別ディレクトリでwpを使うために > ルート直下にindex.phpを置いて、requireでインストール先pathを指定 * /post1/, /post2/のURL > post1は通常のパーマリンクで設定 > post2はCustom Post Type Permalinksで、/hoge/以下を指定できるようパーマリンク設定 * /page2/, /page3/のURL > /hoge/という固定ページを作成して、それを親としてpage2を、その孫としてpage3の固定ページを作成 ### index.php -> index.htmlにできないか ルートおよび/hoge/直下のindex.php(正確には/hoge/という固定ページの作成)は、中身自体には動的な要素は無いためできれば普通のhtmlとして管理したいのです。 (本番サーバのスペックが不明なため、なるべく動的生成ページは避けたいとの意図があります) ### 現在試行錯誤していること * ルート直下にindex.phpをおかないで、別ディレクトリにインストールしたwpをサブディレクトリで使用できないか > 検討つきません... * page2,3固定ページのパーマリンクに、直接下階層のURLを指定できないか > 親子関係ではなく、Custom Post Type Permalinksを使った時のように直接、下階層を指定したい > (/hoge/固定ページを作成しないで、/hoge/page2/のように指定したい) > ------ > Custom Permalinksを使えば同じように自由にパーマリンクを設定できるが、投稿タイプやカスタム投稿タイプにも自由編集機能が反映されてしまうため避けたい... 以上、長文となってしまいましたが何か妙案がありましたらご教授いただければ幸いです。 よろしくお願いします。
回答: ### 解決方法 * 今まで通りルート直下にはindex.phpを設置し、/hoge/は固定ページとして作成しておく * それぞれ同じ階層にindex.htmlを設置し、.htaccessで.phpよりも.htmlが優先されるように設定 `DirectoryIndex index.html index.php` ※index.phpの設置、/hoge/固定ページの作成すらしなくて済むのであればなお良いのですが、さほど実害も無さそうなので... ※なお/index.html, /index.phpでアクセスしようとすると、wp側で / へリダイレクトされる模様 ### 解決できなかった理由 後学のために、なぜすぐに思いつかなかったのか、メモしたいと思います。 * index.htmlとindex.phpを同じ階層に置くという発想がなかった 確かに普通に考えればファイル名が同じでも拡張子が異なれば別ファイルのはずなので、並列にしても問題なかった。 すると実際の表示はどうなるのか → サーバ側で拡張子の優先順位を設定することができることを知った * ルートのindex.phpでwpの環境設定テンプレを読んでいるので、index.htmlをおいたらwpが動作しなくなると思い込んでいた `require( './.../wp-blog-header.php' );` 確かにindex.phpを消してしまうと/post1/など表示できなくなってしまった。 しかしindex.phpを残してindex.htmlを用意し優先順位を付けただけでは、変わらず表示されることが確認できた。※恐らく表示上の優先順位だけであり、内部的にindex.php内に記述したrequireは動作してくれる模様。