C-limber's highへようこそ。
C-limber's highは山登りのサイトではなく、福岡システム開発WEB制作会社 C-limber(クライマー)株式会社の技術メモブログです。
福岡システム開発ホームページ制作をお探しの方はお気軽にご相談下さい。

2014年3月20日木曜日

[Yii][WordPress]WordPressとYiiを共存させる

12:13 Posted by 井口達也 , , No comments
井口です。

WordPressとYiiを共存させてみた話です。

WordPressのプラグインをYii Frameworkを使って作るという事ではなく、
別管理画面をYiiで作り、WordPressの関数・レイアウトを使いながら、
WordPressから吐き出されるheaderやらfooterやらを
Yiiのレイアウトとして読ませるといった感じで進めました。


WordPress自体は、

require('wp-blog-header.php');
このファイルさえ読み込めば、WordPress内の設定やコンテンツをWordPressの関数を使って読み込めるようになるらしいです。
[参考にしたサイト]
外部の php クラスや関数から WordPressの関数あるいはタグを含めた API を扱う方法 : Wordpressをインストールしてみた


しかし普通にやると、
require_once($yii);
した後では、YiiとWordpressは関数のautoload機能でぶつかってしまいます。

class_exists($foo, false)
とすると、yiiはclassを探すのを辞めてくれるらしいですが、
WordPress内の、機関部分をclass_exists($foo, false)として行ったらなにか問題も起きそうです。
[参考にしたサイト]
Undesireable behaviour of class_exists - Yii Framework Forum

なので、今回した対処は簡単に、
--------------------------------------
1) WordPressのbootstrapを先に読む
require('wp-blog-header.php');
してから
require_once($yii);
する。
2) 管理画面とフロント部のエントリスクリプトを別に読む
→ 管理画面用にフロント部用に別々のエントリスクリプト(index.php)を用意してあげる。
--------------------------------------

これでうまく行きました。

あとは、WordPress内の適用されたheader.phpや、footer.phpを、レイアウトのviewスクリプトで直接requireするだけです。

// テーマから直接読み込む
require_once('....../header.php');

以上です

[追記]
エントリスクリプトをわけるのに、フォルダ分けとか考えてましたが、
よく考えたらmod_rewriteで分岐させれますね。。
以下の例は、faq/regist/* と recruit/regist/* へのアクセスはフロント、それ以外を 管理画面へ分岐する設定です。
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule . index.php

#表ページ用 rooting
RewriteRule ^(faq|recruit)/regist/(.*)$ index.php

#管理画面ページ用 rooting
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . admin.php
弊社ではWordPressのカスタマイズ案件、独自管理画面によるシステム開発、Web制作など幅広く対応しております。
お気軽に問い合わせ下さい。
福岡のシステム開発・Web制作 C-limber(クライマー)株式会社


0 コメント:

コメントを投稿