Недавно загнался заменой стандартной страницы wp-login.php, появилось желание и необходимость её изменить достаточно радикально. Связано это было с тем, что после установки модуля магазина Woocommerce как вы знете появляется страница "Мой аккаунт" и там есть профиль пользователя, все настройки и как раз регистрация, авторизация и восстановление пароля. Собственно зачем мне эти функции в двух местах, пусть лучше будут в одном месте. Урок этот подойдет тем, кто хочет убрать все эти возможности там и сделать их на своих страницах сайта (внутри шаблона).
Цели данного урока:
- Скрыть регистрацию, авторизацию и восстановление пароля от стандартного wp-login.php
- Сделать свои страницы на сайте с регистрацией, авторизацией и восстановлением пароля
Всё достаточно просто тут казалось бы, есть куча плагинов для этих целей, ставим их и всё. Но, есть одно НО здесь. После установки подобных плагинов стандартная страница движка WordPress всё равно будет работать, а нам это не совсем нужно. С этим мы и будем бороться, а также мы разберем на примере более удобного плагина, создание страниц авторизации, регистрации и восстановления пароля.
Итак для начала выберем нужный плагин для дальнейшей работы.
Для создания страниц этих я могу порекомендовать использовать бесплатный плагин ля WordPress - User registration & user profile - Profile Builder. Что он нам даст? Достаточно обширный функционал по созданию своих страниц с регистрацией, авторизацией и восстановлением пароля. Плагин имеет гибкую настройку и вы можете создать формы под себя, на своем сайте (в вашем дизайне). Также помимо создания страниц с формами, вы можете использовать формы и в сайдбаре, в различных всплывающих окнах и т.п. Как вам удобнее. С этим плагином мы разобрались. Более подробную информацию вы можете найти на страницу плагина, а тут пока что будет только часть, самая необходимая нам.
Шорткоды (ShortCodes) плагина Profile Builder:
- [wppb-login] – форма входа удобно для размещения на странице или сайдбаре.
- [wppb-register] – создание формы регистрации пользователя.
- [wppb-edit-profile] – редактирование профиля (для авторизованных пользователей).
- [wppb-recover-password] – страница формы восстановления пароля.
Как видите всё достаточно просто, в настройки мы лезть пока что не будем, думаю с ними вы разберетесь сами, ну а если нет, то на страницу с плагином на сайте WordPress есть достаточно подробная и наглядная документация по настройке.
Как и всегда создаем страницы и выбираем в редакторе вкладку "Текст", далее вставляем нужный шорткод от плагина и сохраняем (создавайте разные страницы для каждого шорткода)... С этим собственно и всё, в итоге мы получаем 4 страницы (авторизация, регистрация, редактирование профиля, восстановление пароля).
Уберем стандартные функции движка (уберем wp-login.php):
Теперь давайте скроем/уберем авторизацию и т.п. в файле wp-login.php. Он ведь нам теперь не к чему. Делать мы будем это с помощью обычных функций движка WordPress.
Почему так, а не иначе? Такой способ будет работать именно в той теме, в которой нам это нужно (при смене темы придется делать этот фокус еще раз). Мы не затрагиваем файлы движка, а это значит мы все также успешно сможем обновляться на новые версии движка, также и с плагинами и темами. Кроме того, данный способ будет успешно работать вне зависимости от сервера (Apache/Nginx). Я уже подготовил код, этот код я использую лично у себя в блоге. Давайте уже преступим.
Вставляем данный код в файл functions.php вашей темы:
/*редирект с wp-login.php - авторизация, на страницу с формой авторизации*/ function redirect_login_page() { $page_viewed = basename($_SERVER['REQUEST_URI']); if( $page_viewed == "wp-login.php" ) { wp_redirect( home_url('/login/') ); exit; } } add_action('init','redirect_login_page'); /*редирект с wp-login.php - регистрация, на страницу с формой регистрации*/ function redirect_register_page() { $page_viewed = basename($_SERVER['REQUEST_URI']); if( $page_viewed == "wp-login.php?action=register" ) { wp_redirect( home_url('/register/') ); exit; } } add_action('init','redirect_register_page'); /*редирект с wp-login.php - восстановлене пароля, на страницу с формой восстановления пароля*/ function redirect_lostpassword_page() { $page_viewed = basename($_SERVER['REQUEST_URI']); if( $page_viewed == "wp-login.php?action=lostpassword" ) { wp_redirect( home_url('/lostpassword/') ); exit; } } add_action('init','redirect_lostpassword_page'); /*редирект с wp-login.php - страница выхода, на главную страницу */ function redirect_logout_page() { $page_viewed = basename($_SERVER['REQUEST_URI']); if( $page_viewed == "wp-login.php?action=logout" ) { wp_redirect( home_url('/') ); exit; } } add_action('init','redirect_logout_page'); /*редирект с wp-login.php - страница выхода, на главную страницу*/ function redirect_loggedout_page() { $page_viewed = basename($_SERVER['REQUEST_URI']); if( $page_viewed == "wp-login.php?loggedout=true" ) { wp_redirect( home_url('/') ); exit; } } add_action('init','redirect_loggedout_page'); |
Как видите всё предельно просто и в целом понятно. Страницы для перенаправления можете использовать свои, со своими адресами.
Вот собственно и весь трюк. Как и планировалось в задачах, мы скрыли страницу wp-login.php и создали свои страницы для работы с пользователям (авторизация, регистрация, восстановление пароля).
Альтернатива плагину Profile Builder и правкам functions.php:
Суть этой альтернативы заключается в следующем, мы используем другой плагин, который сам сделает всё, ну почти всё. А именно: ProfilePress - Custom Login, Registration & Password Reset Form Builder for WordPress. С этим плагином мы также заменим регистрацию, авторизацию, восстановление пароля, редактирование пароля и создадим дополнительную страницу с профилем пользователя. Плагин сам отключит использование wp-login.php и сделает перенаправление на созданные страницы. Документация и примеры также есть на сайте автора и на сайте WordPress.
Вот собственно и всё, всем спасибо за внимание. Пишите в комментариях, какие плагины и функции используете вы для этого. Будет интересно почитать и посмотреть ваши способы.
А вот wp-admin переводит на стандартную форму Вордпрес!!!