サイトの一部をWordPressにして、WP外のテンプレートを読み込む

サイトの一部をWordPressにして、WP外のテンプレートを読み込む

サイトの1階層下のディレクトリにWordPressをインストールして、サイト全体のテンプレートを適用させたい、というときにやったことをまとめました。


構造を決定

このように構築したLinuxのWebサーバに、こんな構造のサイトを想定しました。

140609-1

/moduleというディレクトリにheader.phpなどの部品を入れておいて、サイト全体で適用させます。シンプルな内容なのでfooterは今回つくりませんでした。

定期的に発行される社内報をブログ形式で閲覧できるようにしたい、という要望により/infoというディレクトリにWP(ver3.9.1)をインストールしました。このWPも/moduleのテンプレートを適用させます。

LinuxへのWPインストールのメモはこちら

固定ページをトップにした、サイトまるごとWPっていうのもやったことがあるのですが、やはり一長一短ですよね。WPは使うけど、WP外からのテンプレートを読み込み、WP外のトップページへ新着記事を出力する、という形もやってみたらとても勉強になりました。

メインのテンプレートをつくる

WPへ取り掛かる前に、まずは他のページを作ってテンプレートの動作確認をしておかねば。

各ページ構想

例として、こんな感じのphpファイルにしたいと思います。

まず1~4行目は何をしているかというと、現在のURL(http://を除く)を「/」で分割して$slugという配列に入れると、1番めの配列にディレクトリ名が入るはずなので、それを取得しておきます。

140609-2

イメージはこんな感じ。ここを取得しておけば、そのディレクトリ内のページならば、下層のページでも同じ文字列が取得できます。(トップページのみ空白になるので、空白ならhomeという文字列を入れてやります。)これをハイライトしてある18行目でクラス名として出力してやれば、ナビの実装が簡単になります。

この形でCSSを使った実装の詳細はこちらで書いています

で、好みの表示になるように/module/style.cssにCSSを記述していきます。11行目でそれを読み込んでいるわけですが、後で部品化して、どの場所からheader.phpが読み込まれても大丈夫なように、絶対パスで指定しておきます。

動作確認出来たら、分割します。

/module/header.php

ヘッダーの共通部分はここまでかな?お好みですが。

/index.php

トップページ。1行目でheader.phpを読み込んで、残りを記述します。

/aaa/index.php

各ディレクトリ内のindexページ。ヘッダーの読み込み先がトップと違うので注意。

謎の余白にハマる

さて。これでいけると思ってたのに、アップロードしてブラウザで見てみるとinclude("module/header.php");しているところで謎の余白がががが((└(:3」┌)┘))

しばらくハマってたのですが、こういうことだったみたいです。

わたし、エディタはTeraPadを使ってるんですが、文字コード UTF-8 でやってた!!!! UTF-8N で書き直したら直ったぁぁぁぁ。・゚・(ノД`)・゚・。 そういう違いがあるのですね…。今までPHPはWP管理画面のテーマ編集からいじってて、イチから作ったのは初めてだったので勉強になりました。

WP外からテンプレートを読み込む

WPで自作テーマを作って、そこへ外部のテンプレートを読み込むように書いていきます。

テーマを作るときは毎回こちらを熟読させていただいてます。いつもありがとうございますー!

まずは wp-content/themes 内にテーマ名のディレクトリを作って、その中に必要なモノを用意。

  • style.css(必須)
  • index.php(必須)
  • single.php(単一記事ページを使う場合)
  • page.php(固定ページを使う場合)
  • functions.php(あると便利)
  • screenshot.png(お好みで)

style.css(WPテーマ内)

最低限、先頭にこれだけ書いておけばOK。WPだけ適用したいようなCSSがあればこの下に書いていきます。

index.php(WPテーマ内)

メインループの中身は簡単に端折りますが、ざっくりこんな感じ。1行目でWP外のヘッダーを読み込んであげます。13行目は、プラグインを使っても良いしfunctions.php に自分で書いても。サイドバーも欲しい方はお好みで。

17行目は footer.php の有無に関わらず必須です。これと、ヘッダーにもwp_head();がないといけません。

/module/header.php(WP外)

先ほど作ったWP外のヘッダーにハイライト部分を追記します。ナビ実装のために作った変数を利用して、/infoディレクトリ内のページ(WPページ)の時だけ、WPのスタイルシートとwp_head();を読み込みます。

今回は作りませんでしたが、footerも部品化したい場合はこれと同じようにWPページの時だけwp_footer();を出力してやるように書けば良いと思います。

single.php と page.php については、index.php をコピーしてベースに使えば、普通のWPサイトを作るのと変わらないので、以下割愛。

WP外のトップページへ新着記事を表示

こちらにドンピシャな内容が!いつもありがとうございます(*´ω`*)

/index.php(WP外)

WPがインストールされているディレクトリを指定してハイライト部分のように書けば、Wordpressのタグがそのまま使えるんですって!なんて素敵な!!!

あとはよくある形で、get_posts() 使ってやれば簡単ですー!これ使えば、他のページにもいろいろできそうですね!(*゚Д゚*)

以上です!自分備忘録ではありますが、どなたかのお役に立てたら幸いです。

公開日:2014/06/09

7件のコメント

  1. たま より:

    コメント失礼します。
    同じような構造でサイトを作っており、wp外のトップページに新着記事が表示したかったのですがやり方がわからず、RSS表示ツールを使ったら広告まで表示されるようになってしまい困っていました。

    ですがこの記事のおかげで無事に解決しました!とても助かりました。ありがとうございます(*^^*)

    • *you より:

      たまさん、コメントありがとうございます! 完全に自分のためのメモと思って書いてたので、お役に立てて光栄ですー(*゚Д゚*)

  2. もっふ より:

    とても参考になります。
    1つご質問ですが、新着情報は無事wp外のトップページに表示することができましたが、新着情報のsngleページはどうしたらいいんでしょうか?

    • *you より:

      もっふさん、コメントありがとうございます。

      single.php の具体的な中身は? という意味でよいでしょうか。だいたい index.php と同じで、メインループの中に書きます。

      ざっくりですがこのような感じですかね。the_content()で記事の中身を出力するのと、コメントが必要ならcomments_template()も書くと出てきます。

      @ はただの誤変換防止なので a に換えてください。

      ちなみに single.php と page.php を共通にしたければ、WP4.3 以降なら singular.php というのができたので便利ですよー。

  3. ロッソ より:

    望んでいた構造のサイト制作を色々と調べていた中でこちらのサイトを拝見し、大変参考にさせていただいております。
    お聞きしたいことがあります。

    初歩的なことで大変恐縮なのですが
    category/news(newsの一覧ページ)へのリンクを
    /module/header.php(WP外)のナビに加えたい場合、どう記述すれば良いのか?(おそらくリンク先はcategory-news.phpであったりすると思われますが。)

    カテゴリーを2つ使用したいと考えております(仮にですがnewsとgallery)そのカテゴリーの一覧ページの(タイトル、画像、本文、日付のような)具体的なphpの中身をご教授していただけないでしょうか。

    よろしくお願いいたします。

    • *you より:

      ロッソさん、コメントありがとうございます。動作検証してないので確実じゃないですが、概ね以下のような形になると思います。コメント欄では a タグが誤変換されてしまうため @ としておりますので、読み換えてください。

      まず、/module/header.php(WP外)では、ナビに記述するのはURLなので、

      ベタで書くとこんな感じでしょうか。リストの入れ子構造やCSSは調整ください。変数を使えば、スラッグが変更されたときにそのまま対応することもできます。

      次にWPテーマ内に書くアーカイブページのテンプレートですが、これを書くファイルは目的によって異なります。

      カテゴリーのアーカイブページにアクセスされたとき、上記階層図の左から順番に存在するphpファイルを読んでいくので、各アーカイブページを独自のスタイルにしたいのであれば、category-news.php または category-gallery.php を用意してそれぞれ書くことになりますし、カテゴリーアーカイブが共通でよければ category.php です。カテゴリーだけでなく、タグや日付などのアーカイブページひっくるめて共通でよければ archive.php です。さらにはブログのトップページのアーカイブと共通でよければ、最終的には index.php に行き着きます。

      どのファイルにするか決まったら中身は、タイトル、日付、サムネイル、(moreタグがあれば)記事の序文、のような内容を出力すると、以下のような内容になるかと思います。

      なお、蛇足かもですが以前書いたこちらの記事も参考になるかもしれません。

    • ロッソ より:

      お返事いただきありがとうございました。
      色々とご配慮ありがとうございます!
      書いていただいたコードを参考に試作して動作検証ができましたらご報告させていただきます。
      本当にありがとうございました。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

当サイトはスパム対策のため Akismet プラグインを利用しています。コメントデータの処理方法はこちらをご参照ください。

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にですがスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)