Логин перенаправить на предыдущую страницу


8

У меня есть пользовательская страница входа на http://netballscoop.com/log-in/

Когда вы вводите имя пользователя и пароль, он перенаправляет вас на предыдущую страницу, на которой вы находились идеально. Когда вы нажимаете «Выйти», он перенаправляет вас на ту же страницу. Так что все это хорошо работает.

Если вы оставите имя пользователя / пароль пустым или у вас будет ошибка, это приведет к wp-входу в систему. Чтобы предотвратить это, я использовал код из /programming/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 (пользователь «Тестирование» выполняется на странице профиля его участника BuddyPress).

Как перенаправить пользователя на предыдущую страницу при входе в систему?


Мой ранее опубликованный ответ немного неверно истолковал ваш вопрос, поэтому я удалил его, вы уже пробовали связать его с действием wp_login ? Это один из последних, уволенных при успешном входе в систему. Я использовал его на сайте, который я недавно создал с помощью 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: (Таня)

Пообщались с @userabuser и придумали этот ответ, который работает.

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

Важная заметка:

Оказывается, что Таня использовала плагин форума 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, в которой подробно описываются эти действия и хуки, плохо организована и несколько неполна (насколько я могу судить), я предлагаю, чтобы (любой) искал дополнительную информацию о том, какие хуки, где и какие фильтры, что следует использовать посмотрите на этот ресурс, который предоставляет подробный список хуков и фильтров.

Примечания: (разное)

Измените, 'subscriber'чтобы соответствовать роли, которую вы используете для этого типа пользователя. Он также может принимать несколько ролей, поскольку он имеет форму массива.

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

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

@ Таня Привет Таня, спасибо за обновление. В то же время, не могли бы вы удалить последние комментарии (нажмите на маленький крестик при наведении курсора), чтобы мы могли очистить ветку комментариев. Я также буду удалять мои неуместные комментарии.
Адам
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.