Вопрос или проблема
У меня есть пользовательская страница регистрации, которая называется /join/ и имеет ID страницы 484. Она использует плагин для функции регистрации, просто размещая шорткод на странице, всё очень просто.
Мне нужно автоматически входить в систему для пользователя после регистрации и перенаправлять его на конкретную страницу. Поэтому я создал функцию, которая работает, но она также срабатывает, когда я вошел как администратор и перехожу к добавлению нового пользователя или использую функцию wp_insert_user().
Вот код, который работает, но как мне ограничить автологин только на случай, если они приходят со страницы под названием ‘join’?
function auto_login_new_user( $user_id ) {
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id, false, is_ssl()) ;
wp_redirect( 'http://example.com/special.php' );
exit;
}
add_action( 'user_register', 'auto_login_new_user',10,1 );
Теперь этот код не работает, когда я говорю ему выполняться на странице с ID 484, почему?
function auto_login_new_user( $user_id ) {
if (is_page('484')){
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id, false, is_ssl()) ;
wp_redirect( 'http://example.com/special.php' );
exit;
}
}
add_action( 'user_register', 'auto_login_new_user',10,1 );
Используйте эту функцию для перенаправления администратора на панель управления
function admin_login_redirect( $redirect_to, $request, $user )
{
global $user;
if( isset( $user->roles ) && is_array( $user->roles ) ) {
if( in_array( "administrator", $user->roles ) ) {
return $redirect_to;
}
}
}
add_filter("login_redirect", "admin_login_redirect", 10, 3);
Для более подробной информации читайте эту статью.
ID страницы не должны быть в кавычках, посмотрите эту строку вашего кода
if (is_page('484')){
Измените эту строку следующим образом
//Убрали кавычки из ID страницы
if (is_page(484)){
В качестве альтернативы это можно сделать также с помощью Page Slug
вот так
//Slug будет в кавычках
if (is_page('Type_Page_Slug_Here')){
Ответ или решение
Чтобы автоматически авторизовать пользователей после регистрации с определенной страницы в WordPress, необходимо учитывать правильное определение страницы и управление логикой, чтобы избежать ненужного воздействия на административные действия. Вот подробное руководство по реализации этой задачи.
Шаг 1: Проверка страницы регистрации
Ваш код должен проверять, откуда исходит регистрация. Если пользователь зарегистрировался со страницы /join/
, мы можем безопасно авторизовать его. Мы можем сделать это, проверив URL страницы, с которой пришел запрос для регистрации.
Шаг 2: Изменение функции auto_login_new_user
Ниже приведен откорректированный код функции, которая только выполняется, если запрос пришел со страницы регистрации. В этом коде я использую wp_get_referer()
для получения URL страницы, с которой пришел пользователь. Если этот URL содержит /join/
, то только в этом случае будет выполняться автоматическая авторизация.
function auto_login_new_user( $user_id ) {
// Получаем URL страницы, с которой пришел запрос
$referer = wp_get_referer();
// Проверяем, если реферер содержит "/join/"
if ( strpos( $referer, '/join/' ) !== false ) {
// Устанавливаем текущего пользователя
wp_set_current_user( $user_id );
// Устанавливаем куки для аутентификации
wp_set_auth_cookie( $user_id, false, is_ssl() );
// Перенаправляем на специальную страницу
wp_redirect( 'http://example.com/special.php' );
exit;
}
}
add_action( 'user_register', 'auto_login_new_user', 10, 1 );
Шаг 3: Адаптация для предотвращения влияния на администраторов
Важно также убедиться, что мы не влияем на действия администраторов. Это довольно просто: просто проверяем, что текущий пользователь не администратор в функции auto_login_new_user
.
function auto_login_new_user( $user_id ) {
// Получаем текущего пользователя
$current_user = wp_get_current_user();
// Проверяем, если пользователь - администратор
if ( in_array( 'administrator', (array) $current_user->roles ) ) {
return; // Если администратор, выходим из функции
}
// Получаем URL страницы, с которой пришел запрос
$referer = wp_get_referer();
// Проверяем, если реферер содержит "/join/"
if ( strpos( $referer, '/join/' ) !== false ) {
// Устанавливаем текущего пользователя
wp_set_current_user( $user_id );
// Устанавливаем куки для аутентификации
wp_set_auth_cookie( $user_id, false, is_ssl() );
// Перенаправляем на специальную страницу
wp_redirect( 'http://example.com/special.php' );
exit;
}
}
add_action( 'user_register', 'auto_login_new_user', 10, 1 );
Заключение
Этот код гарантирует, что автоматическая авторизация реализуется только для пользователей, регистрирующихся со страницы /join/
, при этом исключая администраторов. Вы можете далее адаптировать и улучшить код в зависимости от ваших специфических требований.
Также стоит отметить, что оптимальные изменения и улучшения вашего кода могут повысить производительность и безопасность вашего сайта WordPress в целом.