theme-my-loginとwp-membersのリダイレクト問題。
2013年05月18日
WordPressのtheme-my-loginのリダイレクトに関する問題です。
話を単純にするため、「購読者」にはログインページのみしか見せない設定にしたとします。
- ダッシュボードのTMLで「Custom Redirection を有効にする」にチェックを入れます。
- 「リダイレクト」タブでカスタム設定をし、「ログイン」は案内ページ、「ログアウト」は「Login」ページを指定します。
実際に購読者ユーザーを作成し、ログイン・ログアウトすると想定通りの動作をします。
次にwp-membersを有効化します。
すると、ログインする「Login」ページに移動します。この動作が意外と不安定で、管理者でログインすると(デフォルト設定ならダッシュボードに入るはずが)Loginページに行ったり案内ページに飛んだりします。
そもそもwp-membersにはリダイレクト機能がありませんので、機能上のコンフリクトを起こしているとしか思えないのですが・・。wp-membersを停止すると、またちゃんと動くんですよねえ。
そこで、いっそtheme-my-loginの「ページブロック機能」を使うことを止めてしまいました!よく考えれば「ブロック機能」自体がリダイレクトですものねえ。
※全ページをログインユーザー以外には見せない場合にしか使えない方法です。
header.phpの最初の行に以下を挿入します。
- <?php
- if (is_user_logged_in() && is_page(‘login’)) { //ログインしていてloginページにいたら強制的に/へ
- header(“Location: /”);
- exit();
- }
- if (!is_user_logged_in() && !is_page(‘login’)) { //ログインしていない・かつログインページでは無い
- header(“Location: /login/”);
- exit();
- }
- ?>
「表示設定」で、フロントページを最初に表示したいページを指定しておいてください。
- <?php
- if (is_user_logged_in() && is_page(‘login’)) { //ログインしていてloginページにいたら強制的に/へ
- header(“Location: /”);
- exit();
- } else {
- header(“Location: /login/”);
- exit();
- }
- ?>
でも良さそうですが、リダイレクトループが発生してしまいす。
この記事は2013/05/18に公開され、248 views読まれました。