Вопрос или проблема
Я пытаюсь войти в систему для пользователя с помощью пользовательской формы регистрации.
Мой код для регистрации пользователя выглядит следующим образом:
function register_user($data) {
$userdata = array(
'user_login' => $data['email'],
'user_email' => $data['email'],
'user_pass' => $data['pssword'],
'user_nicename' => $data['fname'],
'display_name' => $data['fname'],
);
$usermetedata = array(
'son_name' => $data['son_name'],
'shape' => $data['shape'],
'siret' => $data['siret'],
'company_email' => $data['company_email'],
'company_activity' => $data['activity'],
'staff' => $data['staff'],
'position_held' => $data['position_held'],
'company_phone' => $data['company_phone'],
'company_mobile' => $data['company_mobile'],
'company_address' => $data['company_address'],
'company_postal' => $data['company_postal'],
'company_ville' => $data['company_ville'],
'url' => $data['url'],
'personal_region' => $data['personal_region'],
'personal_address' => $data['personal_address'],
'personal_ville' => $data['personal_ville'],
'personal_postal' => $data['personal_postal'],
'personal_phone' => $data['personal_phone'],
'personal_mobile' => $data['personal_mobile'],
'dob' => $data['dob'],
'invite_email' => $data['invite_email']
);
$userid = wp_insert_user($userdata);
foreach ($usermetedata as $key => $val):
add_user_meta($userid, $key, $val);
endforeach;
gdlr_new_user_registered($userid);
// echo 'Регистрация завершена. Перейдите на <a href="' . get_site_url() . '/wp-admin">страницу входа</a>.';
if ($userid) {
user_activation($userid, $data);
}
}
А вот мой код для входа зарегистрированного пользователя:
function gdlr_new_user_registered( $user_id ) {
$user = get_user_by( 'id', $user_id );
wp_set_auth_cookie( $user_id, false, is_ssl() );
$redirect_to = site_url().'le-reseau-social/teepy-tableau-de-bord/';
do_action( 'wp_login', $user->user_login );
return $redirect_to;
}
add_filter('login_redirect', 'gdlr_new_user_registered', 10, 3);
Но я не могу войти, пожалуйста, подскажите мне или дайте знать, если я делаю что-то не так.
Спасибо
Для реализации функции входа WordPress предоставляет функцию wp_login_form(), она сгенерирует HTML для вас. Просто измените CSS.
Для получения дополнительной информации смотрите в WordPress Codex
Нет простого способа зарегистрировать пользователя в WordPress. Следуйте следующим шагам.
- Войдите в админку WordPress -> Перейдите в настройки -> Общие настройки -> Убедитесь, что выбрана опция «Члены. Любой может зарегистрироваться» -> Выберите «Роль по умолчанию для новых пользователей» -> Сохраните.
- Показать форму на фронтенде – создайте шаблон страницы и покажите форму там.
- Сохраните данные при отправке – создайте другой шаблон страницы для обработки отправки формы на фронтенде. Вы также можете использовать ту же страницу. При вставке данных обратите внимание, что вам нужно вставить данные в 2 таблицы: одну для пользователей и другую для пользовательских метаданных. Ознакомьтесь со структурой таблиц WordPress.
Я стараюсь сделать этот ответ коротким и делюсь несколькими ссылками, которые помогут вам в кодировании.
Как отобразить форму регистрации пользователя WordPress на фронтенде сайта?
Попробуйте изменить вашу функцию следующим образом:
if ( $user && ! user_can( $user->ID, 'manage_options' ) ) {
wp_set_current_user( $user->ID, $user_login );
wp_set_auth_cookie( $user->ID );
do_action( 'wp_login', $user_login );
wp_redirect( home_url() );
exit()
Я думаю, вам нужно использовать это после регистрации для автоматического входа.
if ($userid) {
$creds = array(
'user_login' => $data['email'],
'user_password' => $data['pssword'],
'remember' => true
);
$user = wp_signon( $creds, false );
}
Ответ или решение
Для автоматической авторизации пользователя после регистрации через кастомную форму в WordPress, необходимо внести некоторые изменения в ваш существующий код. Давайте разберем шаги, которые вам нужно будет выполнить, чтобы добиться желаемого результата.
1. Регистрация пользователя
В вашей функции register_user
вы уже правильно обрабатываете регистрацию пользователя. Однако, после успешной регистрации необходимо реализовать автоматическую авторизацию. Для этого используйте встроенную функцию wp_signon
сразу после регистрации.
Обновление функции регистрации
Измените вашу функцию следующим образом:
function register_user($data) {
$userdata = array(
'user_login' => $data['email'],
'user_email' => $data['email'],
'user_pass' => $data['pssword'],
'user_nicename' => $data['fname'],
'display_name' => $data['fname'],
);
$usermetedata = array(
// Здесь добавьте все необходимые метаданные
);
// Вставляем пользователя
$userid = wp_insert_user($userdata);
// Добавляем метаданные
foreach ($usermetedata as $key => $val) {
add_user_meta($userid, $key, $val);
}
// Проверяем успешность регистрации
if (!is_wp_error($userid)) {
// Вход после регистрации
$creds = array(
'user_login' => $data['email'],
'user_password' => $data['pssword'],
'remember' => true
);
// Выполняем вход
$user = wp_signon($creds, false);
if (!is_wp_error($user)) {
// Перенаправляем на нужную страницу
wp_redirect(site_url() . 'le-reseau-social/teepy-tableau-de-bord/');
exit;
} else {
echo 'Ошибка авторизации: ' . $user->get_error_message();
}
} else {
echo 'Ошибка регистрации: ' . $userid->get_error_message();
}
}
2. Примечания по коду
-
Обработка ошибок: Используйте
is_wp_error()
для проверки успешности регистрации и авторизации пользователя. Это поможет вам избегать будущих проблем и даст возможность выводить пользователям понятные сообщения о произошедших ошибках. -
Перенаправление: После успешной авторизации следует перенаправить пользователя на целевую страницу. В данном примере это страница
teepy-tableau-de-bord
, но вы можете изменить URL по своему усмотрению.
3. Использование действий
Если вы хотите дополнительно управлять процессом во время и после входа, вы можете использовать хуки, такие как wp_login
. Например, для выполнения дополнительных действий после входа пользователя, добавьте следующий код:
add_action('wp_login', 'my_custom_login_action', 10, 2);
function my_custom_login_action($user_login, $user) {
// Ваши действия после входа пользователя
}
4. Советы по безопасности
-
Проверка данных: Убедитесь, что вы правильно обрабатываете и проверяете входящие данные в функции
register_user
. Это поможет избежать уязвимостей, например, SQL-инъекций. -
HTTPS: Убедитесь в использовании HTTPS, особенно когда передаете пароли и персональные данные.
Заключение
Следуя этим рекомендациям, вы сможете успешно реализовать автоматическую авторизацию пользователей после их регистрации через кастомную форму. Такой подход не только улучшит пользовательский опыт, но и сделает ваш сайт на WordPress более функциональным. Не забывайте тестировать все изменения на локальной или тестовой среде, прежде чем внедрять изменения на рабочем сайте.