マルチサイトのwp-login.phpについて
-
マルチサイトの子サイトごとにログイン画面をカスタマイズしています。
使用しているプラグインは「Custom Login」です。各子サイトごとにカスタマイズできたのですが、ログインエラーの時に表示される「パスワードをお忘れですか」のリンクがメインサイトのURLなので、移動するとデザインが変わってしまって困っています。
現状のリンク:http://example.com/wp-login.php?action=lostpassword
希望のリンク:http://example.com/site-a/wp-login.php?action=lostpassword直接、希望のリンクにアクセスすると問題なく表示されるので、どうにかしてリンクURLを変更できないものかと悩んでいますがなかなか解決方法が見つかりません。
出来ればwp-login.phpを編集せずに変更する方法をご教授いただけないでしょうか?
よろしくお願いいたします。
-
ログインエラーの時に表示される「パスワードをお忘れですか」のリンクだけがメインサイトのURLになっているのですか?
ログインページにアクセスした状態およびエラー時に、フォームの下にも表示されているはずですが、そちらは大丈夫なのでしょうか?
「← サイト名 へ戻る」のリンクはどうですか?
デフォルト(「Custom Login」停止)の状態では、問題ないですか?
ラベルやエラーメッセージ等のテキストに関しては、「Custom Login」導入による変更はないように思うのですが。私は「http://child.parent.example.com/」の形式ですが、問題は発生していません。
popupさん、こんにちは。
ご返答ありがとうございます。ログインエラーの時に表示される「パスワードをお忘れですか」のリンクだけがメインサイトのURLになっているのですか?
ログインページにアクセスした状態およびエラー時に、フォームの下にも表示されているはずですが、そちらは大丈夫なのでしょうか?
「← サイト名 へ戻る」のリンクはどうですか?ログインページのフォームの下にある「パスワードをお忘れですか」のリンクもメインサイトのURLになっています。
「← サイト名 へ戻る」のリンクは、子サイトのリンクになっています。ログインページの「パスワードをお忘れですか」と「← サイト名 へ戻る」のリンクはCSSで非表示にしているので気に留めていませんでした。
説明不足で申し訳ございませんでした。デフォルト(「Custom Login」停止)の状態では、問題ないですか?
プラグイン停止状態でも、メインサイトのURLになっています。
popupさんは、サブドメイン形式で問題が発生していないとのことなので、サブディレクトリ形式だと発生するということでしょうか?
サブドメイン形式で問題が発生していないとのことなので、サブディレクトリ形式だと発生するということでしょうか?
サブディレクトリ形式では確認していないので分かりません。
今まで3.2.xだったのでついでに3.3.1にアップグレードした所、サブドメイン形式でも発生しましたので、3.3あるいは3.3.1以降の不具合の可能性もあります。(仕様変更かもしれませんが。)
wp-login.phpおよびuser.phpを3.2.1と入れ替え、Deprecatedに変更された関数をuser.phpでコメントアウトする事で、ログイン画面については以前のように表示される事を確認しました。
ただし、正常に動作するわけではありません。一応「バグ報告と提案」フォーラムの方へ投稿してみます。
「バグ報告と提案」フォーラムでのスレッドのURLです。:http://ja.forums.wordpress.org/topic/9681
パスワード忘れのリンクURLを変更する方法が分かりました。
対応されるまでの応急処置としてどうぞ。
利用しているテーマのfunctions.phpに記述します。function lostpassword_url_child() { return $lostpassword_url = esc_url( wp_login_url() ) . '?action=lostpassword'; } add_filter( 'lostpassword_url', 'lostpassword_url_child' );
popupさん こんにちは。
各所へのご報告・ご確認ありがとうございました。
早速、頂いたコードをfunctions.phpに記述するとURLが子サイトのものに修正されました!
ありがとうございます!ただ、新たに気づいてしまったのですが、パスワード再発行のメールに記載されているURLがメインサイトのURLになっています。
現状記載されているURL:http://example.com/wp-login.php?action=rp&key=○○○&login=○○○
こちらも変更できる場合は、方法を教えていただけるとありがたいです。
よろしくお願いいたします。フィルターにフックして、wp-login.phpで作成しているメッセージ本文を変更する事で可能でした。
function retrieve_message() { $login = trim($_POST['user_login']); $user_data = get_user_by('login', $login); $user_login = $user_data->user_login; $message = __('Someone requested that the password be reset for the following account:') . "\r\n\r\n"; $message .= site_url() . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= __('To reset your password, visit the following address:') . "\r\n\r\n"; $message .= '<' . site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n"; return $message; } add_filter('retrieve_password_message', 'retrieve_message');
上記はメッセージを変えたい時に利用して、今回は次のようにしてURLだけ書き換える方がいいかもしれません。
function retrieve_password_message_rewrite_url($message) { global $current_site, $current_blog; $message = preg_replace('#'. $current_site->domain . '#', $current_blog->domain, $message); return $message; } add_filter('retrieve_password_message', 'retrieve_password_message_rewrite_url');
URLだけ書き換える方法ですが、うっかりしてディレクトリ形式に対応させていませんでした。
次のように変更してください。$message = preg_replace('#'. $current_site->domain . $current_site->path . '#', $current_blog->domain . $current_blog->path, $message);
ディレクトリ形式ではインストールしていないので確認はしていません。
一応ですが、マルチサイト化してある場合のみ有効です。解決しましたら、トピック右側のサイドバーから解決済みへの変更をお願いします。
popupさん、解答ありがとうございます。
ご返信が遅くなって申し訳ございません。両方試してみました。
■1つ目の方法
URLは変更されましたが、リセットURLの後半のkeyとloginの数値が空になってしまってリセット処理ができませんでした。■2つ目の方法
keyとloginの数値は入っていますが、URLがメインサイトのままでした。
リセット処理は出来ました。何度もお付き合いいただいて申し訳ありませんが、対処方法を教えていただければと思います。
すみません。keyが入っていない事に気がつきませんでした。
一つ目は次のように変更してください。function retrieve_message($message, $key) { $login = trim($_POST['user_login']); if(strpos( $_POST['user_login'], '@' )) { $user_data = get_user_by( 'email', trim( $_POST['user_login'] ) ); } else { $user_data = get_user_by('login', $login); } $user_login = $user_data->user_login; $message = __('Someone requested that the password be reset for the following account:') . "\r\n\r\n"; $message .= site_url() . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= __('To reset your password, visit the following address:') . "\r\n\r\n"; $message .= '<' . site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n"; return $message; } add_filter('retrieve_password_message', 'retrieve_message', 10, 2);
二つ目に関しては原因が分かりません。
preg_replace()の直前で$current_site->domain等を表示して、値が入っているか確認してください。
exit;で処理を止めているので、メールは送信されません。global $current_site, $current_blog; echo '<br />' . $current_site->domain . $current_site->path; echo '<br />' . $current_blog->domain . $current_blog->path; exit; $message = preg_replace('#'. $current_site->domain . $current_site->path . '#', $current_blog->domain . $current_blog->path, $message);
URLだけ書き換える方法ですが、うっかりしてディレクトリ形式に対応させていませんでした。
こちらの投稿を見ていませんでした(汗)
投稿が入れ違いになってしまったようですみません。二つ目に関しては原因が分かりません。
2つ目の方法は下記の頂いたコードに書き換えたら変更されました。
$message = preg_replace('#'. $current_site->domain . $current_site->path . '#', $current_blog->domain . $current_blog->path, $message);
お騒がせしてすみませんでした。
1つ目の方法についても、頂いたコードで無事にkeyが表示されました。
この度は、ご尽力いただきありがとうございました。
- トピック「マルチサイトのwp-login.phpについて」には新たに返信することはできません。