


Блог IT-шника
Блог IT-шника
Привіт:) Сайт із багатьома зареєстрованими користувачами — звичайна справа. Наприклад, ресурс новин, блог з кількома авторами або інтернет-магазин. Щоб користувачам було зручно працювати з таким сайтом, їм потрібно надати можливість зареєструватися та увійти до свого профілю або кабінету. У цьому пості зроблю огляд робочих варіантів, як зробити реєстрацію на WordPress.
Насамперед потрібно дозволити реєстрацію.
Тепер кожен відвідувач зможе зареєструватися. Взагалі доступність реєстрації на сайті ВордПрес можна добитися декількома способами. Покажу за допомогою вбудованих у WordPress інструментів та через окрему сторінку з формою.
до змісту ↑За замовчуванням доступна за адресою
site.com/wp-login.php?action=register
Це посилання можна знайти під формою входу в систему.
Переваги методу:
Недоліки:
Довільна сторінка з окремою URL-адресою для реєстрації користувачів має сенс, якщо з метою безпеки потрібно приховати (змінити) адресу входу до адмін-панелі сайту.
Вирішення цієї задачі покажу на прикладі безкоштовного WP-модуля Ultimate Member.
Після встановлення та активації плагіну вам пропонують створити декілька додаткових сторінок. Натисніть Create Pages.
Тепер вже є можливість реєструватися у системі за новою URL-адресою (стандартні адреси за замовчуванням також доступні):
site.com/register/
Якщо бажаєте змінити цю адресу, в адмін-меню Сторінки відкрийте створену сторінку Register на редагування.
Праворуч у редакторі знайдіть секцію налаштувань Постійне посилання, замініть на своє, оновіть сторінку.
Також можна змінити адреси інших сторінок — входу/виходу, відновлення пароля, кабінету користувача.
Якщо потрібно змінити поля форми сторінки реєстрації, перейдіть до Ultimate Member > Forms, оберіть потрібну форму, наведіть на неї курсор миші та натисніть Редагувати.
Розширення пропонує зручний конструктор форм із можливостями перетягування, додавання, редагування та видалення полів.
Щоб зберегти зміни, не забудьте натиснути кнопку Оновити.
до змісту ↑Користувачеві потрібні будуть наступні сторінки:
Знаючи ці адреси, їх можна вивести у меню чи сайдбарі. Також для цього модуль надає шорткод. Посилання на сторінки можна вставити у будь-якому місці сайту.
Перейдіть до Ultimate Member > Forms та вставте шорткод створеної форми реєстрації у віджет Власний HTML.
На панелі віджетів відвідувач побачить:
ВордПрес не надає візуальних інструментів, щоб редагувати права та ролі користувачів. Для цього перейдіть до Ultimate Member > User Roles, оберіть бажану роль для налаштування, наведіть на неї курсор та натисніть Edit.
Для кожної з них можна дозволити або заборонити:
Переваги:
Недоліки:
Цей спосіб підійде для просунутих користувачів, які хочуть повністю контролювати роботу свого ресурсу. Для початківців рекомендую користуватися першими двома.
У файл functions.php вставте PHP-код
/**
* Форма реєстрації на сайті WordPress без плагінів
*
* Щоб вставити форму на сайті, використовуйте шорткод
*
* [mp_registration_form]
*
*/
if ( ! function_exists( 'mp_registration_form' ) ) {
function mp_registration_form( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ) {
echo '
<style>
div {
margin-bottom: 2px;
}
input {
margin-bottom: 4px;
}
</style>
';
echo '
<form action="" method="post">
<div>
<label for="username">Username <strong>*</strong></label>
<input type="text" name="username" value="' . ( isset( $_POST['username'] ) ? $username : null ) . '">
</div>
<div>
<label for="password">Password <strong>*</strong></label>
<input type="password" name="password" value="' . ( isset( $_POST['password'] ) ? $password : null ) . '">
</div>
<div>
<label for="email">Email <strong>*</strong></label>
<input type="text" name="email" value="' . ( isset( $_POST['email'] ) ? $email : null ) . '">
</div>
<div>
<label for="website">Website</label>
<input type="text" name="website" value="' . ( isset( $_POST['website'] ) ? $website : null ) . '">
</div>
<div>
<label for="firstname">Name</label>
<input type="text" name="fname" value="' . ( isset( $_POST['fname'] ) ? $first_name : null ) . '">
</div>
<div>
<label for="website">Surname</label>
<input type="text" name="lname" value="' . ( isset( $_POST['lname'] ) ? $last_name : null ) . '">
</div>
<div>
<label for="nickname">Nickname</label>
<input type="text" name="nickname" value="' . ( isset( $_POST['nickname'] ) ? $nickname : null ) . '">
</div>
<div>
<label for="bio">About me / Biography</label>
<textarea name="bio">' . ( isset( $_POST['bio'] ) ? $bio : null ) . '</textarea>
</div>
<input type="submit" name="submit" value="REGISTRATION"/>
</form>
';
}
}
if ( ! function_exists( 'mp_registration_validation' ) ) {
function mp_registration_validation( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ) {
global $reg_errors;
$reg_errors = new WP_Error;
if ( empty( $username ) || empty( $password ) || empty( $email ) ) {
$reg_errors->add( 'field', 'Missing required form field' );
}
if ( 4 > strlen( $username ) ) {
$reg_errors->add( 'username_length', 'The username is too short. Minimum 4 characters required' );
}
if ( username_exists( $username ) )
$reg_errors->add( 'user_name', 'Sorry, this username already exists!' );
if ( ! validate_username( $username ) ) {
$reg_errors->add( 'username_invalid', 'Sorry, the username you entered is invalid' );
}
if ( 5 > strlen( $password ) ) {
$reg_errors->add( 'password', 'Password length must be more than 5 characters' );
}
if ( ! is_email( $email ) ) {
$reg_errors->add( 'email_invalid', 'Email is not valid' );
}
if ( email_exists( $email ) ) {
$reg_errors->add( 'email', 'This email is already in use' );
}
if ( ! empty( $website ) ) {
if ( ! filter_var( $website, FILTER_VALIDATE_URL ) ) {
$reg_errors->add( 'website', 'Invalid website URL' );
}
}
if ( is_wp_error( $reg_errors ) ) {
foreach ( $reg_errors->get_error_messages() as $error ) {
echo '<div>';
echo '<strong>ERROR</strong>: ';
echo $error . '<br/>';
echo '</div>';
}
}
}
}
if ( ! function_exists( 'mp_complete_registration' ) ) {
function mp_complete_registration() {
global $reg_errors, $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio;
if ( 1 > count( $reg_errors->get_error_messages() ) ) {
$userdata = array(
'user_login' => $username,
'user_email' => $email,
'user_pass' => $password,
'user_url' => $website,
'first_name' => $first_name,
'last_name' => $last_name,
'nickname' => $nickname,
'description' => $bio,
);
if ( ! username_exists( $username ) && ! email_exists( $email ) ) {
$user_id = wp_create_user( $username, $password, $email );
$user = new WP_User( $user_id );
$user->set_role( 'administrator' );
}
echo 'Registration successful! Go to <a href="' . get_site_url() . '/wp-login.php">login page</a>.';
}
}
}
if ( ! function_exists( 'mp_custom_registration_function' ) ) {
function mp_custom_registration_function() {
if ( isset($_POST['submit'] ) ) {
mp_registration_validation(
$_POST['username'],
$_POST['password'],
$_POST['email'],
$_POST['website'],
$_POST['fname'],
$_POST['lname'],
$_POST['nickname'],
$_POST['bio']
);
global $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio;
$username = sanitize_user( $_POST['username'] );
$password = esc_attr( $_POST['password'] );
$email = sanitize_email( $_POST['email'] );
$website = esc_url( $_POST['website'] );
$first_name = sanitize_text_field( $_POST['fname'] );
$last_name = sanitize_text_field( $_POST['lname'] );
$nickname = sanitize_text_field( $_POST['nickname'] );
$bio = esc_textarea( $_POST['bio'] );
mp_complete_registration( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio );
}
mp_registration_form(
$username = ( isset( $_POST['username'] ) ? $username : null ),
$password = ( isset( $_POST['password'] ) ? $password : null ),
$email = ( isset( $_POST['email'] ) ? $email : null ),
$website = ( isset( $_POST['website'] ) ? $website : null ),
$first_name = ( isset( $_POST['fname'] ) ? $first_name : null ),
$last_name = ( isset( $_POST['lname'] ) ? $last_name : null ),
$nickname = ( isset( $_POST['nickname'] ) ? $nickname : null ),
$bio = ( isset( $_POST['bio'] ) ? $bio : null )
);
}
}
if ( ! function_exists( 'mp_custom_registration_shortcode' ) ) {
function mp_custom_registration_shortcode() {
ob_start();
mp_custom_registration_function();
return ob_get_clean();
}
}
add_shortcode( 'mp_registration_form', 'mp_custom_registration_shortcode' );
$user->set_role( 'administrator' );
значення "administrator
" — це роль користувача, яка надається йому при створенні. Детальніше дивіться "Ролі та права користувачів WordPress: які є за замовчуванням та як налаштувати".Змінити зовнішній вигляд полів введення форми можна за допомогою стилів CSS. Їх можна додати на початку коду або через адмін-меню Вигляд > Налаштувати > Додатковий код CSS.
Переваги:
Недоліки: