Регистрация в вордпресс без плагина
В этой статье я попытаюсь донести как можно сделать регистрацию пользователей в вордпресс без установки дополнительных плагинов. Кроме того форма будет работать на технологии 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 ‘[‘