人気のPHPフレームワークCodeIgniterとWordPressを連携させるプラグインWP Code Igniterが登場しました。このプラグインは、WordPressをCodeIgniterで構築されたWebアプリの一部として利用できるようにするもので、MVCアーキテクチャのなかのViewとしてWordPressが統合されるという仕組みになっているようです。
さっそく試してみたのだが、このプラグインはまだテスト段階ということもあって、私のUbuntuローカル環境では動作しませんでした。そこで、他にもWordPressとCodeIgniterを連携させる方法はないかと調べてみると、あちこちでいろいろな試みがなされていました。大きく分けると次の3つに分類できます。
- プラグインを通じた統合(WP Code Igniterの場合がこれ)
- テーマとfunctions.phpを利用した統合
- 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で構築されたSeezooCMSやPyroCMSなどを使えばいいんじゃない」という考え方もあるでしょう。まあ、多分それが正解でしょうが、いくらCodeIgniterが気に入ったからといって、使い慣れたプラットフォームはなかなか捨てられないということもあります。
また、3番目の方法なら、たぶんWordPress以外のCMSでもうまく行くと思うので、いろいろと試してみると、思いもかけない組み合わせが見つかるかもしれません。
ただし、現段階ではあくまでもお試しレベルなので、予期せぬ問題を孕んでいる可能性はあります。実際のサイト構築などに応用するときは、くれぐれも自己責任でお願いします。