ログイン前のページにリダイレクト


8

http://netballscoop.com/log-in/にカスタムログインページがあります

ユーザー名とパスワードを入力すると、完全に表示していた前のページにリダイレクトされます。[ログアウト]をクリックすると、同じページにリダイレクトされます。したがって、これはすべてうまくいきます。

ユーザー名/パスワードを空白のままにしたり、エラーが発生したりすると、wp-loginが表示されます。これを防ぐために、https://stackoverflow.com/questions/11477107/redirect-away-from-login-pageのコードを使用しました

add_action('login_redirect', 'redirect_login', 10, 3);
function redirect_login($redirect_to, $url, $user) {
if($user->errors['empty_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['empty_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['invalid_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['incorrect_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else{
    wp_redirect(get_bloginfo('url').'/log-in');
}
exit;
}

これは、私のWebサイトでのログインエラーに最適です。しかし、ログインリダイレクトにより、http: //netballscoop.com/members/testingに移動します(ユーザー 'Testing'は、BuddyPressメンバーのプロフィールページに移動します)。

ログイン時にユーザーを前のページにリダイレクトするにはどうすればよいですか?


以前に投稿した回答で質問が少し誤って読まれたため、削除しました。wp_loginアクションをすでに試してみましたか?これは、ログインに成功したときに最後に起動されるものの1つです。私が最近BuddyPressを使用して構築したサイトで使用しましたが、それは魅力のように機能しました。
エリックアレン

こんにちは@allenericr、正直に言うと、どこから始めればいいのかわかりません。php / functions / etcに関する私の知識は非常に限られています。あなたがそれがより良い代替案であるとわかったら、あなたはそのサイトに使用しているものを投稿できますか?
ターニャ

回答:


8

このlogin_redirectように関数をフィルタリングし、必要に応じて調整できます。

add_filter('login_redirect', 'redirect_previous_page', 10, 1);

function redirect_previous_page( $redirect_to ){
    global $user;

    $request = $_SERVER["HTTP_REFERER"];

    if ( in_array( $user->roles[0], array( 'administrator') ) ) {

        return admin_url();

    } elseif ( in_array( $user->roles[0], array( 'subscriber') ) ) {

        return $request;
    } 

    return $redirect_to;
}

更新1:

コード(上記)は上記で変更およびテストされています-動作します。

更新2:(Tanyaによる)

@userabuserとチャットして、うまくいくこの回答を思いつきました。

// Redirect to previous page 
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');

重要な注意点:

TanyaがbbPressフォーラムプラグインを使用していたことがわかりました。

add_filter('login_redirect', 'function_name'); //the standard WordPress API filter

これは正しく、「通常の」 WordPress条件で機能します。この場合、bbPressフィルターによって優先的に上書きされました。

add_filter('bbp_user_login_redirect_to', 'function_name'); //the bbPress API filter

これらのアクションとフックについて詳しく説明しているbbPress.org Webサイトのドキュメントは整理が不十分であり、やや不完全です(私が知る限り)ので、(誰でも)どのフックの場所何をフィルターにかけるについてさらに情報を探すことをお勧めしますフックとフィルターの詳細なリストを提供するこのリソースを見てください。

注:(その他)

'subscriber'そのタイプのユーザーに使用しているロールに合わせて変更します。また、配列の形式であるため、複数の役割を受け入れることができます。

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')

@Tanyaオプションのパラメーターを含めるようにコードを編集しました。$ userにアクセスできない可能性があります。このアップデートを試して知らせてください。
Adam

@Tanyaこんにちはターニャ、更新ありがとうございます。その間、コメントスレッドをクリーンアップできるように、最後のコメントを削除してください(カーソルを合わせて小さなxをクリックしてください)。また、無関係なコメントも削除します。
アダム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.