Приветствую вас, дорогие друзья. Настало время снова окунуться в мир программирования для WordPress.
В предыдущих публикациях мы уже поговорили о следующих аспектах данной CMS:
В данной статье речь пойдет о
регистрации и авторизации в WordPress.
Не секрет, что WordPress позволяет работать с различными группами
пользователей, а не только с одним администратором. Данная особенность
позволяет реализовать вполне сносный функционал регистрации и
авторизованного доступа к тому или иному контенту (если уж по какой-то
причине так нужно).
Думаю все знают, что разрешение на регистрацию новых пользователей
выдает администратор, ставя галочку в настройках админки WordPress
(Параметры→Общие).
Рис. 1. Включение регистрации новых пользователей в админке WordPress.
Теперь пользователи смогут переходить на страницу
http://vas_domen.ru/wp-login.php?action=register и наблюдать там стандартную форму регистрации WordPress.
Рис. 2. Стандартная форма регистрации WordPress.
Если регистрацию в админке вы не разрешили (см. рис. 1), то и форма
регистрации вам не отобразится. Вместо нее вы увидите сообщение о
невозможности регистрироваться на данном блоге.
Стандартная процедура регистрации в WordPress организована довольно
грамотно (если не считать запроса имени пользователя, он же login, при
регистрации; мы то с вами знаем, что вполне достаточно только адреса эл.
почты). После проверки на занятость другим пользователем указываемого
логина и e-mail, WordPress отправит валидационное письмо и проверит
правильность введенного при регистрации адреса эл. почты. Все круто и
правильно.
Для авторизации достаточно перейти по адресу
http://vash_domen.ru/wp-login.php. Вы увидите стандартную форму авторизации (видели вы ее уже сто раз наверное, когда в свой блог логинились).
Рис. 3. Стандартная форма авторизации WordPress.
Есть даже стандартная процедура восстановления пароля. Перейдите по ссылке
http://vash_domen.ru/wp-login.php?action=lostpassword и вы увидите форму грамотного функционала восстановления.
Рис. 4. Стандартна форма восстановления пароля WordPress.
Уж не знаю, зачем я рассказываю эти банальности. Они всем известны? Тогда будем считать, что для разогрева.
Чем мне не нравится стандартный функционал регистрации/авторизации в
WordPress? — Да, видимо, тем что на нормальных сайтах регистрация и
авторизация выглядит немного по-другому.
Ну во-первых, на нормальных сайтах нет логотипа WordPress в формах
регистрации/авторизации. С этой проблемой, кстати, можно легко бороться.
Вот
тут процедура подробно описана. Суть сводится к цеплянию на хук
login_head вывода стилей для
#login h1 a. Обратите внимание на директиву
!important в перечислении свойств стиля. Именно благодаря этой директиве наложенные вами стили считаются наиболее приоритетными.
По аналогии с приведенным примерам на странице
авторизации/регистрации можно наворатить стилями, все, что вашей
душеньке будет угодно.
Что такое хук и как на него цеплять функции вы сможете узнать из моего видеокурса по разработке плагина для WordPress.
С детским садом закончили, переходим к серьезным вещам. На нормальном
сайте обычно форма авторизации и регистрации вписывается в дизайн
сайта, а не располагается на отдельных страницах.
Впишем форму регистрации в дизайн сайта
С регистрацией пользователя будет много мороки из-за необходимости
верифицировать указанный при регистрации e-mail. Я решил эту проблему
следующим тернистым путем:
- Создал отдельную таблицу в БД для хранения имени
пользователя, e-mail и пароля (генерируется автоматически). В этой
таблице будут храниться данные, указанные пользователем в
регистрационной форме до верификации адреса эл. почты. Также в этой
таблице будет храниться проверочный код (зачем он нужен, станет понятно
дальше).
- В форму регистрации пользователь вводит логин и e-mail.
Логин и e-mail валидируются на предмет совпадения с данными уже
существующих пользователей WordPress. Ну и естественно проверяется ввел
ли пользователь хоть что-то в поля «Логин» и «E-mail», а также
соответствует ли введенный текст регулярному выражению для адреса эл.
почты.
- Если валидация прошла успешно, на почту указанную при регистрации уходит сообщение, содержащее проверочную ссылку.
- Если пользователь перешел по ссылке, то стандартным методом добавления нового пользователя wp_create_user($user_name, $password, $user_email) происходит сохранение нового пользователя уже в стандартной таблице пользователей WordPress.
Видеоурок. Как сделать свою регистрацию пользователей в WordPress
Бонусом в видеоуроке показано как сделать валидацию имени
пользователя и адреса эл. почты. Продемонстрированный подход годится на
все случаи жизни.
Скачать плагин, демонстрируемый в видеоуроке (5.49 кБ).
Листинг 1. HTML-код формы регистрации, демонстрируемый в видеоуроке.
2 | < form action = "" method = "get" id = "m_reg_user_form" > |
4 | < label for = "m_user_name" >Имя:</ label > |
7 | < input type = "text" name = "m_user_name" id = "m_user_name" > |
10 | < label for = "m_user_email\" >Эл. почта:</ label > |
13 | < input type = "text" name = "m_user_email" id = "m_user_email" > |
16 | < input type = "submit" name = "m_regiser_usr_btn" value = "Зарегистрироваться" > |
В качестве дополнительных плюшек можно добавить проверку разрешения
регистрации в админке (см. рис. 1). Проверить можно функцией
get_option('users_can_register'). Если функция вернет TRUE, то регистрироваться можно.
Еще я бы сделал функцию в плагине, отвечающую за вывод формы
регистрации, чтобы она выводилась именно там где нужно, а не болталась в
посте без надобности. Но это уже в следующий раз.
Думаю имеет смысл показывать форму регистрации только не
авторизованным пользователям. Проверять авторизован пользователь или нет
позволяет функция
is_user_logged_in(). Она вернет TRUE если пользователь имеет статус авторизованного.
После перехода пользователя по валидационной ссылке из e-mail, у вас
может возникнуть законное желание сразу его авторизовать. Это можно
сделать следующим образом.
Листинг 2. PHP-код насильственной авторизации пользователя в WordPress.
2 | $creds [ 'user_login' ] = $email_check ->user_name; |
3 | $creds [ 'user_password' ] = $email_check ->password; |
4 | $creds [ 'remember' ] = false; |
5 | $user = wp_signon( $creds , false); |
Как вы понимаете, авторизация происходит благодаря методу
wp_signon.
Раз уже речь зашла об авторизации, то давайте поговорим, как это сделать без насилия.
Авторизация пользователя WordPress своей формой
Точно также, как и в случае регистрации, я запросто могу представить
себе, что вам захотелось прикрутить свою собственную форму авторизации, а
не гонять пользователя на рис. 3.
Используйте HTML-код, представленный ниже. Единственное, что нужно сохранить, это атрибуты
name и адрес в атрибуте
action тега
form (иначе WP не поймет, что вы от него хотите).
Листинг 3. PHP-код формы авторизации. Можно использовать в плагине.
2 | $current_url = "http://" . $_SERVER [ 'HTTP_HOST' ]. $_SERVER [ 'REQUEST_URI' ]; |
6 | <form action=\ "" .wp_login_url( $current_url )."\" id=\"loginForm\" method=\"post\"> |
8 | <label for =\"login\">Имя пользователя:</label> |
11 | <input type=\"text\" name=\"log\" value=\"\" id=\"login\"> |
14 | <label for =\"pass\">Пароль:</label> |
17 | <input type=\"password\" name=\"pwd\" value=\"\" id=\"pass\"> |
19 | <div class =\"rememberme\"> |
20 | <input name=\"rememberme\" type=\"checkbox\" id=\"rememberme\" value=\"forever\"> <label for =\"rememberme\">Запомнить меня</label> |
22 | <div class =\"submit\"> |
23 | <input name=\"submit\" type=\"submit\" value=\"Войти\"> |
25 | <input type=\"hidden\" value=\" $product_id \" name=\"product_id\"> |
Атрибут action тега form содержит функцию
wp_login_url. Она
на столько замечательная, что позволяет в качестве атрибута передать
адрес, на который пользователя вернет после авторизации. Это может быть
адрес данной страницы (как в листинге 3) или URL личного кабинета —
решать вам.
На этом пока все. До встречи в следующих видеоуроках.
P.S.: На правах саморекламы. А вы знаете, что я разработал
замечательный плагин, позволяющий продавать инфотовары с блога на WordPress?
Комментариев нет:
Отправить комментарий