I log …

WordPressと静的ページの共存

目次

  1. ディレクトリ構造
  2. wordpressの設定
  3. 共通パーツを呼び出す
  4. HTMLファイルでWP関数を使う
  5. sitemap.xml

 諸事情によりクライアントワークでWordpressと静的ページを共存させることがありました。

ディレクトリ構造

 Wordpressはドキュメントルートではなくサブディレクトリに入れ、静的ページとWordpressの両方でドキュメントルート直下のアセットを呼び出します。
 また、Wordpressの中に入っているindex.phpをドキュメントルートに移動させます。

wordpressの設定

 サイトアドレス (URL)がhttps://xxx.com/の場合WordPress アドレス (URL)はhttps://xxx.com/wp/のように、サブディレクトリまでのアドレスを設定します。
 また、サイトトップでWordpressを読み込むように、ドキュメントルートのindex.phpを下記のように変更します。

 これで、サイトトップに訪れた際には、Wordpressで設定しているトップページが表示されます。

共通パーツを呼び出す

 グロナビなどをWordpress、静的ページに共通で呼び出したいと思います。
 まずは、.htaccessでHTML内でPHPを使えるようにします。書き方はサーバーによっていろいろあるみたいなので、サーバーにあったものを使ってください。
 そうすることで、下記のようにインクルード用のファイルを呼び出せるようになります。

 ちなみに、.htmlを使っているのはSSIを検討した名残なのでもちろん.phpを使ってもいいと思います。

HTMLファイルでWP関数を使う

 Wordpressの独自関数は、当然Wordpressの関数が定義されているファイルを読み込まないと使えません。
 下記のようにwp-load.phpを読み込めば静的ページでもWordpressの独自関数を使えるようになります。

 特定のページだけなら固定ページがありますし、単純なループだけならAPIを使った方がいいと思うのですが、どうしてもWP関数が必要なときにはこういう手段もあります。

sitemap.xml

 ここまで紹介したように、Wordpressと静的ページを共存させること自体はそんなに難しくはないかと思います。
 これまでsitemap.xmlファイルの出力についてはWordpress単体だとプラグイン任せであることが多かったのですが、プラグインだと静的ページを含めてくれないためSEO面での課題が残りました。
 WPテーマ内のfunctions.phpにて動的にsitemap.xmlを出力するようにする必要があります。

 SEOの話をしているので、今回はすべてのページがリンクされているページまたはパーツがあるという前提で進めます。それをfile_get_contents()で呼び出してしまおうという、単純なものです。
 おすすめは、リンクしたいすべてのページをJSONで集約することです。それをフッターまたはサイトマップページで呼び出し、また、sitemap.xmlを作成するための処理でも呼び出すといいかと思います。
 JSONを使わずにべた書きしたHTMLをfile_get_contents()でもいいですが、その場合はpreg_match_all()を使ってhref属性の中身を取り出していくなど追加処理が必要です。

 前提が長くなりましたが、コード例は下記のようになります。

 JSONを取得し、ニュース記事など、動的に追加するページを取得。
 念のため、配列内の重複を削除し、/wp/sitemap.xmlを出力します。

 アーカイブページが無限スクロールのサイトならこれでもいいですが、ページャーを使っていたらアーカイブの2ページ以降のリンクを入れることも必要です。その際はWP_Queryの$found_postsを使います。

 まぁ、こうして書いてますが、私はべた書きHTMLからリンクを拾うはめになったのですがね。
 こうすればよかったなーというまとめになります。