WordPressとCodeIgniterを連携させる3つの方法

人気のPHPフレームワークCodeIgniterとWordPressを連携させるプラグインWP Code Igniterが登場しました。このプラグインは、WordPressをCodeIgniterで構築されたWebアプリの一部として利用できるようにするもので、MVCアーキテクチャのなかのViewとしてWordPressが統合されるという仕組みになっているようです。

さっそく試してみたのだが、このプラグインはまだテスト段階ということもあって、私のUbuntuローカル環境では動作しませんでした。そこで、他にもWordPressとCodeIgniterを連携させる方法はないかと調べてみると、あちこちでいろいろな試みがなされていました。大きく分けると次の3つに分類できます。

  1. プラグインを通じた統合(WP Code Igniterの場合がこれ)
  2. テーマとfunctions.phpを利用した統合
  3. CodeIgniterのルートディレクトリ内にWordPressのフォルダを作って統合

上記の方法のうち、2番目の方法でチャレンジしている人が多かったようですが、その方法は千差万別で、使用しているCodeIgniterのバージョンも比較的古いものが多いです。

CodeIgniterのViewをテーマ内から利用しようという発想は、シンプルで解り易いのですが、WordPressとCodeIgniterの両方に精通していないと実現は難しく、構築後のメンテナンスも大変そうです。

スポンサーリンク

WordPressとCodeIgniterの最も簡単な連携方法

ということで、最後に残った3番目の方法ですが、これが一番原始的な方法で、ほとんど説明の必要がないほど単純明解です。

例えば、CodeIgniterのルートディレクトリにblogという名前のフォルダを作り、そこにWordPressをインストールすれば作業はこれで終わってしまいます。

唯一懸念される問題は、CodeIgniter側でWordPressをインストールしたフォルダと同名のコントローラーを作った場合ですが、デフォルトの状態で使う場合は問題はありません。通常、CodeIgniterでblogコントローラーを作った場合は、サイトのURL/index.php/blogでアクセスすることになります。これに対してWordPressのフォルダへのアクセスは、サイトアドレス/blogとなるので、両者が衝突することはありません。

CodeIgniterのindex.phpを消去したい場合

ただし、デフォルトの状態が気に入らないという人も当然いるわけで、SEO対策上もよろしくありません。この問題については、CodeIgniterのユーザーガイドでも、「index.phpを消す方法」として紹介されいます。これは、ルートディレクトリに次の内容の.htaccessを置けば解決します。

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

なお、この設定をした場合、WordPressをインストールしたフォルダと同名のコントローラーがCodeIgniter側にあるときは、CodeIgniterのコントローラーが優先されることになってしまいますが、WordPressをインストールしたフォルダのblogをコントローラーに支配させないために、上記の.htaccessの2行めを次のように変更すれば問題は解決します。

RewriteCond $1 !^(index\.php|images|robots\.txt|blog)

本当はSeezooCMSやPyroCMSでもいいのだが

以上で、index.phpも消えてすっきりします。この方法だと、固定ページをCodeIgniterで作り、ブログはWordPressを利用するという使い方ができます。番外編として、WordPressのルートディレクトリにCodeIgniterのsystemフォルダやapplicationフォルダを置くという方法もあると思いますが、この場合は、WordPressの管理画面とデータベースのみを利用してサイト構築はCodeIgniterで行うことになると思います。

もちろん、最初からWordPressとCodeIgniterを連携させようなんて考えないで、「素直にCodeIgniterで構築されたSeezooCMSPyroCMSなどを使えばいいんじゃない」という考え方もあるでしょう。まあ、多分それが正解でしょうが、いくらCodeIgniterが気に入ったからといって、使い慣れたプラットフォームはなかなか捨てられないということもあります。

また、3番目の方法なら、たぶんWordPress以外のCMSでもうまく行くと思うので、いろいろと試してみると、思いもかけない組み合わせが見つかるかもしれません。

ただし、現段階ではあくまでもお試しレベルなので、予期せぬ問題を孕んでいる可能性はあります。実際のサイト構築などに応用するときは、くれぐれも自己責任でお願いします。

タイトルとURLをコピーしました