В этой статье я попытаюсь донести как можно сделать регистрацию пользователей в вордпресс без установки дополнительных плагинов. Кроме того форма будет работать на технологии Ajax, то есть без перезагрузки. Это очень удобно если вы хотите вставить форму регистрации в модальном окне.
Для осуществления задуманного вам потребуется сделать несколько вставок в файл функций functions.php, в подключаемые файлы с расширением .js и .css. Проделав несколько несложных шагов, вы сможете сделать форму регистрации без чтения документации к разным плагинам, которые иногда работают не так как бы хотелось. Поехали …
Первый шаг: создание формы
Код который сделал я выглядит так:
<form action="#" method="post" name="step-register-1" class="form"> <input type="hidden" name="action" value="create_user"> <p><input type="text" name="user_name" placeholder="Имя" required=""></p> <p><input type="text" name="user_last_name" placeholder="Фамилия" required=""></p> <p><input type="email" name="user_email" placeholder="E-mail" required=""></p> <p><input type="tel" name="user_tel" placeholder="Телефон" required=""></p> <p><input type="password" name="user_pass" placeholder="Пароль" required=""></p> <p><input type="password" name="user_re_pass" placeholder="Повторите пароль" required=""></p> <p><button class="bts bts-primary" type="submit">Начать регистрацию</button></p> </form>
Конечно, вы можете не ограничиваться набором полей, и вставить свои поля дополнительно. Эта статься носит цель показать базовые принципы как сделать регистрацию на вордпрессе. Вставьте вашу форму именно в том месте где бы вы хотели её видеть.
Стилизация формы
Я не буду приводить примеры css стилей, которые прописывал у себя по той причине, что на каждом сайте стилизация должна быть своя. Каждый сайт должен быть уникальным полагаю. Переходим к следующему этапу.
Второй шаг: Обработка отправки формы
Следующий пример кода, который я приведу необходимо будет вставить в файл functions.php.
add_action( 'wp_ajax_create_user', 'create_user_callback' );
add_action( 'wp_ajax_nopriv_create_user', 'create_user_callback' );
function create_user_callback() {
require_once ABSPATH . WPINC . '/registration.php';
$message = [];
$post = array_map( 'sanitize_text_field', $_POST );
$first_name = $post['user_name'];
$last_name = $post['user_last_name'];
$user_password = trim( $post['user_pass'] );
$user_re_password = $post['user_re_pass'];
$phone_number = $post['user_tel'];
$user_email = sanitize_email( $post['user_email'] );
// проверка на заполненость
if ( empty( $first_name ) || empty( $last_name ) || empty( $user_password ) || empty( $phone_number ) || empty( $user_email ) ) {
echo json_encode( [
'status' => 0,
'message' => 'Все поля должны быть заполнены.'
] );
wp_die();
}
// проверка почтового адреса
if ( ! is_email( $user_email ) ) {
echo json_encode( [
'status' => 0,
'message' => 'Введённый вами e-mail в неправильном формате'
] );
wp_die();
}
// проверка существования почтового адреса в базе
if ( email_exists( $user_email ) ) {
echo json_encode( [
'status' => 0,
'message' => 'Введённый вами e-mail уже кем то используется.'
] );
wp_die();
}
// проверка пароля на сложность
if ( ! preg_match( "/^[\da-zA-Z_]{5,12}$/", $user_password ) ) {
echo json_encode( [
'status' => 0,
'message' => 'Пароль может содержать только английские буквы, цифры, дефис и подчеркивание. Длина пароля от 5 до 12 символов.'
] );
wp_die();
}
// проверяем совпадение пароля и повтора пароля
if ( $user_password != $user_re_password ) {
echo json_encode( [
'status' => 0,
'message' => 'Пароль и повтор пароля не совпадают.'
] );
wp_die();
}
// создание пользователя
$user_id = wp_create_user( $user_email, $user_password, $user_email );
if ( $user_id ) {
// создание текста писем юзеру и админу
$subject = sprintf( 'Начало регистрации %s %s на сайте', $first_name, $last_name );
$message_admin = sprintf( '<h3>Данные нового участника</h3> <br> Имя: %s <br> Фамилия: %s <br> Телефон: %s <br> E-mail: %s', $first_name, $last_name, $phone_number, $user_email );
$message_user = sprintf( '<h3>Здравствуйте %$1s</h3> <br><p>Вы начали регистрацию на сайте «%$2s».
<br><b>Ваши данные:</b><br>
- Имя пользователя %3s <br>
- Пароль: %4s </p>
<p>Ссылка для входа: %5s</p>
<p>Для полной активации необходимо полностью заполнить ваш профиль в личном кабинете.</p>',
$first_name,
get_bloginfo( 'name' ),
$user_email,
$user_password,
get_permalink( 19 )
);
$headers = array(
'content-type: text/html',
);
// отправка писем
wp_mail( get_bloginfo( 'admin_email' ), $subject, $message_admin, $headers );
wp_mail( $user_email, $subject, $message_user, $headers );
// начинаем авторизацию
$user = wp_authenticate( $user_email, $user_password );
// обновляем данные пользователя
wp_update_user( array(
'ID' => $user->ID,
'first_name' => $first_name,
'last_name' => $last_name
) );
update_user_meta( $user->ID, 'phone_number', $phone_number );
// удаляем существующие авторизационные данные, авторизуем текущего
if ( ! is_wp_error( $user ) ) {
nocache_headers();
wp_clear_auth_cookie();
wp_set_auth_cookie( $user->ID );
echo json_encode( [
'status' => 1,
'message' => 'Вы успешно авторизованы и сейчас будете перенаправлены в личный кабинет.',
'redirect' => get_permalink( 19 ),
'timeout' => 0
] );
wp_die();
}
}
wp_die();
}
Какие действия выполняет данный код?
- Делает проверку на заполнение полей
- Ищет в базе нет ли уже зарегистрированного пользователя с таким email
- Проверяет сложность, длину пароля
- Если в все проверки пройдены, то авторизует пользователя, выполняет вход и перенаправляет на определённую страницу
- Отправляет письма новому пользователю и уведомление администратору
Шаг третий: обработка и отправка Ajax запроса
Для того чтобы связать ранее представленные HTML код формы и php код вам понадобится вставить некоторый кусок кода в основной джаваскрипт файл вашей темы:
$(document).on('submit', '[name="step-register-1"]', function (event) {
event.preventDefault();
var form = $(this).serialize();
$.ajax({
type: 'POST',
url: allData.ajaxurl,
data: form,
cache: false,
success: function (data) {
try {
var json = JSON.parse(data);
if (json.status) {
setTimeout(function (e) {
document.location.href = json.redirect;
}, json.timeout);
} else {
// здесь выводится сообщение об ошибке над формой,
// вам нужно заменить строчку на свою
$(".form-info").fadeIn().find('.elementor-alert-title').text(json.message);
}
} catch (e) {
console.log('Ошибка ' + e.name + ":" + e.message + "\n" + e.stack);
}
}
});
});
Вот и всё. Наша форма регистрации создана всего за несколько шагов. Остаётся проверить работоспособность формы.
Удачи вам и побольше регистраций на сайте. P.S. Но только не от спамеров, а от хороших людей.
$message = [];
На этой строке Ваши изменения в коде PHP были отменены из за ошибки на строке wp-content/themes/zalive/functions.php. Исправьте и попробуйте пересохранить.
syntax error, unexpected ‘[‘