Существует множество различных способов создания собственной страницы входа и регистрации в WordPress. Однако многие из этих методов чрезмерно продуманы или настолько стилизованы или сложны, что не особо хочется с ними разбираться.
В этой статье вы найдете простые и самые основные инструменты, необходимые для создания собственной (пользовательской) страницы входа в WordPress и страницы регистрации.
Для этого вам понадобятся 2 ключевые функции WordPress:
1. wp_signon() - аутентифицирует пользователя с возможностью запоминания учетных данных.
2. wp_create_user() - добавляет нового пользователя в базу данных WordPress.
Примечание: эта статья не содержит информации о стилизации страницы входа. Скорей всего, у вас уже есть стиль или дизайн или вы находитесь в процессе его создания.
Рассмотрим пошаговую систему создания собственную страницу регистрации/входа пользователя WordPress без плагина.
Шаг 1. Создайте новую страницу-шаблон с именем login.php
В этом файле вам нужно обработать переменные, приходящие из вашей формы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /* Template Name: Login */ if($_POST) { global $wpdb; //We shall SQL escape all inputs $username = $wpdb->escape($_REQUEST['username']); $password = $wpdb->escape($_REQUEST['password']); $remember = $wpdb->escape($_REQUEST['rememberme']); if($remember) $remember = "true"; else $remember = "false"; $login_data = array(); $login_data['user_login'] = $username; $login_data['user_password'] = $password; $login_data['remember'] = $remember; $user_verify = wp_signon( $login_data, false ); if ( is_wp_error($user_verify) ) { header("Location: " . home_url() . "/login/error/"); //Обратите внимание: мы создаем страницу под названием «Ошибка», которая является дочерней страницей входа в систему для обработки ошибок. На ней вы можете разместить любой текст } else { echo "<script type='text/javascript'>window.location='". home_url() ."'</script>"; exit(); } } else { // Не введены данные для входа - вероятно, вам следует добавить сюда еще несколько полей для пользователей, здесь приведен необходимый минимум echo "Неверные учетные данные"; } |
Сама ваша форма входа должна содержать такие поля:
1 2 3 4 5 | <form id="login" name="form" action="<?php echo home_url(); ?>/login/" method="post"> <input id="username" type="text" placeholder="Логин" name="username"> <input id="password" type="password" placeholder="Пароль" name="password"> <input id="submit" type="submit" name="submit" value="Отправить"> </form> |
После того, как вы создали шаблон, создайте новую страницу, которая использует шаблон «Login», и назовите ее «Вход», а также задайте ссылку login. Вы можете называть его как хотите, но обратите внимание, что в этой статье жестко указаны ссылки на URL-адрес страницы: yourwebsite.com/login/.
Поэтому вам необходимо убедиться, что постоянная ссылка вашей страницы соответствует этому условию или изменить URL-адреса в коде таким образом, чтобы они соответствовали URL-адресу вашей новой страницы «Вход».
Шаг 2 - Перенаправления
Если вы перейдете на новую страницу входа, то она уже должна позволить вам успешно войти в систему. Теперь давайте немного наведем порядок.
Таким образом, вполне вероятно, что вы захотите перенаправить любого, кто пытается использовать стандартные страницы входа в WordPress, на вашу новую пользовательскую страницу входа. Просто вставьте это в файл functions.php вашей темы:
1 2 3 4 5 6 7 8 9 10 11 12 13 | // Login redirects function custom_login() { echo header("Location: " . get_bloginfo( 'url' ) . "/login"); } add_action('login_head', 'custom_login'); function login_link_url( $url ) { $url = get_bloginfo( 'url' ) . "/login"; return $url; } add_filter( 'login_url', 'login_link_url', 10, 2 ); |
Шаг 3 - Создаем страницу регистрации
На нужно повторить процесс для страницы регистрации - создаем файл register.php, который будет шаблоном для страницы регистрации. Сначала рассмотрим саму форму с точки зрения того, какие поля нужно размещать в ней в HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <form id="wp_signup_form" action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post"> <label for="username">Имя пользователя</label> <input type="text" name="username" id="username"> <label for="email">Email</label> <input type="text" name="email" id="email"> <label for="password">Пароль</label> <input type="password" name="password" id="password"> <label for="password_confirmation">Повторите пароль</label> <input type="password" name="password_confirmation" id="password_confirmation"> <input name="terms" id="terms" type="checkbox" value="Yes"> <label for="terms">Я согласен(-на) с условиями предоставления услуг</label> <input type="submit" id="submitbtn" name="submit" value="Зарегистрироваться" /> </form> |
Теперь необходимо проверить все поля формы на соответствие определенным критериям.
Этот код также содержит очень простую проверку, которая создает массив ошибок $errors, а затем проверяет количество элементов в нем. Пользователь будет зарегистрирован на вашем WordPress-сайте только в том случае, если массив ошибок пуст.
Вы можете использовать отслеживание всех ошибок либо сократить их количество в зависимости от ваших требований.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | /* Template Name: Register */ require_once(ABSPATH . WPINC . '/registration.php'); global $wpdb, $user_ID; //Проверяем, вошел ли уже пользователь в систему if ($user_ID) { //Залогиненного пользователя перенаправляем на главную страницу. header( 'Location:' . home_url() ); } else { $errors = array(); if( $_SERVER['REQUEST_METHOD'] == 'POST' ) { //Убедитесь, что имя пользователя присутствует и еще не используется $username = $wpdb->escape($_REQUEST['username']); if ( strpos($username, ' ') !== false ) { $errors['username'] = "Извините, в именах пользователей нельзя использовать пробелы"; } //если поле с именем пользователя пустое if(empty($username)) { $errors['username'] = "Пожалуйста введите имя пользователя"; } elseif( username_exists( $username ) ) { //если такой пользователь уже зарегистрирован $errors['username'] = "Имя пользователя уже существует, попробуйте другое"; } // Проверяем, есть ли email и действителен ли он $email = $wpdb->escape($_REQUEST['email']); if( !is_email( $email ) ) { $errors['email'] = "Пожалуйста, введите действительный email"; } elseif( email_exists( $email ) ) { $errors['email'] = "Такой email уже зарегистрирован"; } // Проверка пароля на валидность if(0 === preg_match("/.{6,}/", $_POST['password'])){ $errors['password'] = "Пароль должен состоять не менее чем из шести символов."; } // Проверка повторного ввода пароля if(0 !== strcmp($_POST['password'], $_POST['password_confirmation'])){ $errors['password_confirmation'] = "Пароли не совпадают"; } // Проверить согласие с условиями обслуживания if($_POST['terms'] != "Yes"){ $errors['terms'] = "Вы должны согласиться с Условиями использования"; } // если ошибок нет if(0 === count($errors)) { $password = $_POST['password']; $new_user_id = wp_create_user( $username, $password, $email ); // Здесь вы можете делать все, что угодно, например, отправлять электронное письмо пользователю и т. д. $success = 1; header( 'Location:' . get_bloginfo('url') . '/login/?success=1&u=' . $username ); } } } |
Затем в WordPress вы создаете свою страницу под названием «Регистрация» и выбираете для нее этот шаблон. И снова мы добавляем некоторые перенаправления в наш файл functions.php, чтобы полностью скрыть стандартную страницу регистрации WordPress:
1 2 3 4 5 6 7 8 9 10 11 | function register_link_url( $url ) { if ( ! is_user_logged_in() ) { if ( get_option('users_can_register') ) $url = '<li><a href="' . get_bloginfo( 'url' ) . "/register" . '">' . __('Register', 'yourtheme') . '</a></li>'; else $url = ''; } else { $url = '<li><a href="' . admin_url() . '">' . __('Site Admin', 'yourtheme') . '</a></li>'; } return $url; } add_filter( 'register', 'register_link_url', 10, 2 ); |
Опять же, наш скрипт регистрации предполагает, что страница регистрации находится по адресу yourwebsite.com/register/.
Теперь у вас есть страницы входа и регистрации, которые можно настроить так, как вы хотите.
Итого
Теперь вы можете отказаться от стандартных страниц входа и регистрации WordPress для вашего сайта. Эта реализация может быть доработана с помощью настраиваемых ссылок для выхода из системы и правильного метода работы с забытыми паролями.
По мотивам статьи Create a simple custom WordPress login and sign up without plugins