Редирект при входе на предыдущую страницу
У меня есть кастомная страница входа по адресу 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;
}
Обновление 1:
Код (выше) был изменен и протестирован — он работает.
Обновление 2: (от Tanya)
Обсуждалось с @userabuser и было найдено рабочее решение.
// Перенаправление на предыдущую страницу
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');
Важное примечание:
Оказалось, что Tanya использовала плагин форума bbPress, поэтому, несмотря на оригинальный сниппет, который использует
add_filter('login_redirect', 'function_name'); //стандартный фильтр WordPress API
и который является правильным и работает в "обычных" условиях WordPress, в данном случае он переопределялся по приоритету фильтром bbPress,
add_filter('bbp_user_login_redirect_to', 'function_name'); //фильтр API bbPress
Поскольку документация на сайте bbPress.org, описывающая эти действия и хуки, плохо организована и неполна (насколько я могу судить), я предлагаю (всем), кто ищет дополнительную информацию о какие хуки где и какие фильтры что делают, обратиться к этому ресурсу, где представлен подробный список хуков и фильтров.
Примечания: (разное)
Измените 'subscriber'
на роль, которую вы используете для данного типа пользователя. Также можно указать несколько ролей, так как это массив.
in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')

@Tanya Изменил код, чтобы включить необязательные параметры. Переменная $user может быть недоступна. Попробуйте это обновление и дайте мне знать.
