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メンバーのプロフィールページから取得されます)。
ログイン時にユーザーを前のページにリダイレクトするにはどうすればよいですか?
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;
}
コード(上記)は上記で変更され、テストされています-動作します。
@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')