※注意※ このカスタマイズは、WordPress のクッキー設定を変更します。
FuelPHP で WordPress のログイン機能を使う方法です。
王道はFuelPHPで全部まかなう
もちろん、王道はFuelPHPで全部まかなう、だと思います。
- FuelPHP でログイン機能を作る
- FuelPHPフレームワークベースのCMS Novius OSを使う
という方法があります。しかし、WordPress を一緒に使うことで楽に構築できるケースはあるかもしれません。
今回は、WP を http://localhost/wordpress/ 、Fuel を http://localhost/public/ という形をまず試してみます。WP の配下に Fuel、あるいは Fuel の配下に WP、という方法もありますが、まずは .htaccess の干渉しない横並びをやってみました。
(追記: Fuel を http://localhost/ にした場合、逆に Fuel を wp-content/ 配下に置いた場合でも問題なく動作します。その場合、下記のwp-load.php
読み込みパスを変更してください。)
FuelPHP から WordPress を呼び出す
FuelPHP から WordPress を呼び出す方法は簡単です。app/bootstrap.php
に、 require '../wordpress/wp-load.php';
と記述すれば、OK です。ただし Fuel のコアよりも先に WordPress を呼び出す必要があります。 __
関数を、WordPress と FuelPHP の両方で定義しているためです。
FuelPHP 側は、core/base.php
で if ( ! function_exists('__')) ...
という記述があります。Fuel の __()
関数(Lang::get
のラッパー)は、コア自体では使っていないようなので、WP → Fuel の順に呼び出せば衝突回避できます。
こうすると、WordPress のテンプレートタグを FuelPHP から呼び出すことができます。ただし WordPress のテンプレータグは echo までしてしまうものが多いので、上手く扱うのは大変だったりしますが。
ログイン状態のチェック
WordPress にログインしているかどうかは、WordPress が発行するクッキーを取得してチェックできます。ただし、クッキーのパスが WordPress のルートパスに設定されています。このままだとパスの外からクッキー情報を取得することができません。
WordPress では、wp-config.php
に記述することで、クッキーパスを変更することができます。
// 必要に応じて変更してください
define('COOKIEPATH','/');
define('SITECOOKIEPATH','/');
define('ADMIN_COOKIE_PATH','/wordpress/wp-admin');
// 必要に応じて変更してください
のようにすると、http://localhost/
配下であれば、WordPress のクッキーを取得することができるようになります。
ログインフォームの表示
WordPress で用意されている関数 wp_login_form()
を使うと、FuelPHP に WordPress のログインフォームを表示することができます。ただしこの関数は標準では echo するので、オプション array('echo' => false)
で echo しないで値として返すようにしています。また、WordPress の is_user_logged_in()
関数を利用して、ログインしていない場合のみログインフォームを表示するようにしています。
public function action_index() { $view = View::forge('welcome/index'); if (is_user_logged_in()) { $format = 'こんにちは%sさん' ; $user = wp_get_current_user(); $loginform = sprintf($format,$user->display_name); $loginform .= '<a href="' . wp_logout_url(Uri::base(false)) . '">ログアウトする</a>'; // wp_logout_url の引数は、ログアウト後の移動先 } else { $loginform = wp_login_form(array('echo' => false)); } $view->set_safe('loginform',$loginform); return $view; }
こうすることで、WordPress のログイン機能を使うことができるようになります。
ログイン失敗した場合(パスワード間違い等)のリダイレクト先を変更するには、WordPress ログイン失敗時の処理を変更するをごらんください。デフォルトでは、wordress の wp-login.php にリダイレクトされます。
デメリット
WordPress 本体には、ユーザー本人がアカウントを消す機能がありません。ウェブサービスのベースとする場合は注意してください。
前述のように、クッキーのパスを書き換えます。このため、セキュリティ面では注意が必要です。同一ドメイン内で、パスの範囲を緩めるので、そこまで神経質になる必要はないでしょうけど。またプラグインが動かなくなる可能性はあります。
WordPress 配下に Fuel を置く場合は、クッキーパス書き換えは不要なはずです。(ただしこの場合は .htaccess の衝突の可能性があります。WordPress のパーマリンク設定をカスタマイズする場合は注意してください。)
名前空間も注意が必要です。WordPress が PHP5.2系対応(=名前空間に対応していない)なので、グローバル空間に WP 関数が展開されてしまいます。
コメント
Comments are closed.