フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【WordPress】スラッグ名と同一ディレクトリを重複共存させる方法

WordPress
カスタマイズ

こんにちは、岐阜・名古屋を拠点に全国各地からご依頼いただくWEBサイトを制作しているフリーランスエンジニアの寺井です。

WordPressの固定ページやカスタム投稿タイプのスラッグ名はWordPressが内部的で生成されるURLで実際にサーバー上にその名前のディレクトリが生成されるわけではありません。
そのためサーバー上にスラッグ名と同じ名前のディレクトリを実際に作成すると、WordPress上の同一スラッグ名が付いているページは表示出来なくなってしまいます。
これはWordPressで内部的に生成されているURLよりも実際にサーバー上に存在しているディレクトリが優先されてしまうからです。

しかし要件や仕様によってはWordPress上で作成したスラッグ名と同一のディレクトリを実際に作成したいという場面があるかもしれません。
そこで、今回の記事ではこのようなスラッグ名と同一のディレクトリを重複させる方法をご紹介したいと思います。

実現させたいこと

今回の記事で実現させたいURLの構成を図で表すと以下のようなものになります。

サーバー上のディレクトリ構成だと以下のようなものになります。

WordPressでスラッグ名「company」という固定ページを作成しつつ、実際に「company」というディレクトリ名を作成し、その配下に「messsage」というディレクトリ名を作成します。
この状態で、固定ページの「company」と実際のディレクトリの「company/message」を重複した状態でどちらも表示させる方法です。

スラッグ名と同一ディレクトリを重複共存させる方法

通常であれば「company」というスラッグ名で作成した固定ページは「https://●●●.com/company/」というURLで表示することが出来ます。
しかし、サーバー上に同一名のディレクトリが実際に存在していると、実際のディレクトリの方が優先されてしまい、固定ページの方は表示することが出来ません。

そこでこのような構成を実現するために、ひと工夫します。

まずはWordPressがインストールされている直下にあるindex.phpをコピーします。

このファイルに書かれている以下の部分、

/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';

この部分を以下のように書き換えて、サーバー上の「company」ディレクトリにアップロードします。

/** Loads the WordPress Environment and Template */
require '../wp-blog-header.php';

この際、注意が必要なのはもともとあったindex.phpは削除せず、コピーしたものを書き換えてアップロードします。

また、WordPressを「wp」などのディレクトリにインストールしている場合、書き換える際は、そのディレクトリ名を書くのを忘れないようにします。

/** Loads the WordPress Environment and Template */
require '../wp/wp-blog-header.php';

つまり相対パスで以下の「wp-blog-header.php」を参照出来るようにパスを指定します。

作業は以上になります。

ここまでの作業をすることで、「company」というディレクトリがサーバー上に存在している状態で、スラッグ名「company」の固定ページを表示することが出来るようになります。

まとめ

いかがでしたか?
少し利用機会は限られてくる構築内容となりますが、このようなことも実現することが出来ます。
いつか利用するかもしれないから頭の片隅に入れておきたい内容ですね。