Как запретить пользователям переход в профиль WordPress после входа
У меня есть пользовательская роль на сайте, и пользователи могут получить доступ только к странице своего профиля - это минимум, который требует WordPress. Однако аккаунты управляются нами, и это приватный сайт. Мы не хотим, чтобы пользователи могли изменять имя пользователя, email или пароль через WordPress.
Единственная текущая проблема - это вход в систему. Все внутренние страницы требуют авторизации. У нас есть лендинг со ссылкой на страницу входа, где мы используем параметр redirect_to=/blog/
, и после входа пользователь попадает в блог. Это работает нормально.
Однако, если пользователь переходит по прямой ссылке на внутреннюю страницу (или получает её по email через настройки подписки), система потребует авторизации и перенаправит на страницу входа без параметра redirect_to. В результате пользователь попадает прямо на страницу профиля.
Почему система перенаправляет на профиль вместо запрошенной страницы - для меня загадка, но нам нужно перенаправлять пользователей обратно в блог.
Вот функция, которую я создал с целью перенаправления в блог после входа. На данном этапе нам не важно, работают ли постоянные ссылки при первом посещении (они будут работать после входа).
Но эта функция не работает. wp_signon срабатывает не после входа пользователя, а используется для самого входа.
Что мне делать?
function login_redirect() {
wp_redirect( get_bloginfo( 'url' ) . '/blog/' );
}
// Используем правильный хук для редиректа после входа
add_action('wp_login', 'login_redirect');`
Есть два возможных решения вашей проблемы.
Вы можете скачать плагин "Login redirect" отсюда: http://wordpress.org/extend/plugins/peters-login-redirect/
Вы можете использовать фильтр login_redirect:
function my_login_redirect($redirect_to, $request) { $redirect_url = get_bloginfo( 'url' ) . '/blog/'; return $redirect_url; } add_filter("login_redirect", "my_login_redirect", 10, 3);
Больше информации о фильтре login_redirect: http://codex.wordpress.org/Plugin_API/Filter_Reference/login_redirect

Каждое из вышеперечисленных решений, кажется, перенаправляет пользователя на определённый заранее заданный URL.
Чтобы перенаправить пользователя на страницу, к которой он изначально пытался получить доступ, я думаю, это можно достичь только путем (тьфу) редактирования wp-login.php и изменения
$redirect_to = admin_url();
на
$redirect_to = $_SERVER[HTTP_REFERER];
