web-dev-qa-db-ja.com

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

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;
}

これは私のウェブサイトでのログインエラーにはとても役立ちます。しかし、ログインリダイレクトで http://netballscoop.com/members/testing に移動します(ユーザー「Testing」はBuddyPressメンバーのプロフィールページから取得されます)。

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

8
Tanya

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:(ターニャによる)

@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

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

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

これらのアクションとフックの詳細を記載したbbPress.orgWebサイトのドキュメントは、構成が不十分で、やや不完全(私が知る限り)であるため、 what hooks whereおよびwhatフィルタリングwhatこのリソースはこちら をご覧ください。これは、フックとフィルターの詳細なリストを提供します。

注:(その他)

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

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