FuelPHP で WordPress のログイン機能を使うの続きです。
WordPress では、wp_login_form()
関数が用意されていて、wp-login.php
以外の場所からログイン操作できるようになります。ログイン後、元のページに戻ることができます。しかし、ログイン失敗時には wp-login.php
にリダイレクトされます。ログイン失敗時のリダイレクト先を変えることができないか?と調べてみました。
公式フォーラムの過去ログ Can you stop wp_login_form redirecting to wp-login on fail? に掲載されていました。元は How to Redirect WordPress Failed Logins かららしいです。
add_action( 'wp_login_failed', 'my_front_end_login_fail' ); // hook failed login function my_front_end_login_fail( $username ) { $referrer = $_SERVER['HTTP_REFERER']; // where did the post submission come from? $redirect = 'http://127.0.0.1/index.php/welcome/login/failed'; // URL when login failed //if there's a valid referrer, and it's not the default log-in screen if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) { wp_redirect( $redirect ); exit; } }
WordPress のアクションフック機能を使って、ログイン失敗時の処理を変更することができました。(wp_login_failed
フック自体は、wp-includes/pluggable.php
にあります。ログイン処理をカスタマイズしている場合、上述のコードを記述しても希望する動作にならないかもしれません。)
FuelPHP 側では、失敗時の処理をするコントローラを追加します。(デフォルトの welcome.php に追加する場合です。)
public function action_login($failed) { $view = View::forge('welcome/index'); $loginform = wp_login_form(array('echo' => false)); if ('failed' == $failed) { $loginform .= '<p>ログインに失敗しました</p>'; } $view->set_safe('loginform',$loginform); return $view; }
Selenium でのテストコードです。 https://gist.github.com/4028788 FuelPHP を http:/127.0.0.1/ に、WordPress を http://127.0.0.1/wordpress にインストールした場合です。WordPress のユーザーアカウントは、ユーザー名 testuser1 パスワード testpass1 です。