Як просто зробити реєстрацію на сайті WordPress

Привіт:) Сайт із багатьома зареєстрованими користувачами — звичайна справа. Наприклад, ресурс новин, блог з кількома авторами або інтернет-магазин. Щоб користувачам було зручно працювати з таким сайтом, їм потрібно надати можливість зареєструватися та увійти до свого профілю або кабінету. У цьому пості зроблю огляд робочих варіантів, як зробити реєстрацію на WordPress.

Насамперед потрібно дозволити реєстрацію.

Як увімкнути реєстрацію в WordPress

  1. Відкрийте адмін-розділ Налаштування > Загальне.
  2. Активуйте опцію Реєструватись може кожен.
  3. Збережіть зміни.

Тепер кожен відвідувач зможе зареєструватися. Взагалі доступність реєстрації на сайті ВордПрес можна добитися декількома способами. Покажу за допомогою вбудованих у WordPress інструментів та через окрему сторінку з формою.

до змісту ↑

Стандартна сторінка реєстрації WordPress

За замовчуванням доступна за адресою

site.com/wp-login.php?action=register

Це посилання можна знайти під формою входу в систему.

Посилання на сторінки реєстрації та входу до системи доступні у застарілому стандартному віджеті Мета.

Переваги методу:

  • не потрібно більше нічого налаштовувати.

Недоліки:

  • всім буде видно URL-адресу адмін-панелі (навіть якщо її перейменовано), через що зростає ймовірність злому та купи СПАМ-коментарів.
Рекомендую використовувати штатні інструменти ВордПрес, якщо в систему входить лише адміністратор (власник) сайту.
до змісту ↑

Власна сторінка реєстрації за допомогою плагіну

Довільна сторінка з окремою URL-адресою для реєстрації користувачів має сенс, якщо з метою безпеки потрібно приховати (змінити) адресу входу до адмін-панелі сайту.

Вирішення цієї задачі покажу на прикладі безкоштовного WP-модуля Ultimate Member.

Создание страниц

Після встановлення та активації плагіну вам пропонують створити декілька додаткових сторінок. Натисніть Create Pages.

Тепер вже є можливість реєструватися у системі за новою URL-адресою (стандартні адреси за замовчуванням також доступні):

site.com/register/

Якщо бажаєте змінити цю адресу, в адмін-меню Сторінки відкрийте створену сторінку Register на редагування.

Праворуч у редакторі знайдіть секцію налаштувань Постійне посилання, замініть на своє, оновіть сторінку.

Також можна змінити адреси інших сторінок — входу/виходу, відновлення пароля, кабінету користувача.

Якщо потрібно змінити поля форми сторінки реєстрації, перейдіть до Ultimate Member > Forms, оберіть потрібну форму, наведіть на неї курсор миші та натисніть Редагувати.

Розширення пропонує зручний конструктор форм із можливостями перетягування, додавання, редагування та видалення полів.

Щоб зберегти зміни, не забудьте натиснути кнопку Оновити.

до змісту ↑

Виведення сторінок на сайті

Користувачеві потрібні будуть наступні сторінки:

  • реєстрація (за замовчуванням має посилання site.com/register/),
  • вхід (site.com/login/),
  • вихід (site.com/logout/),
  • відновлення пароля (site.com/password-reset/),
  • обліковий запис або профіль з можливістю редагувати дані про себе (site.com/account/),
  • публічна сторінка користувача (site.com/user/ім'я_користувача/).

Знаючи ці адреси, їх можна вивести у меню чи сайдбарі. Також для цього модуль надає шорткод. Посилання на сторінки можна вставити у будь-якому місці сайту.

до змісту ↑

У віджеті за допомогою шорткоду

Перейдіть до Ultimate Member > Forms та вставте шорткод створеної форми реєстрації у віджет Власний HTML.

Якщо шорткод не спрацював, додайте код у файл functions.php

add_filter( 'widget_text', 'do_shortcode' );

На панелі віджетів відвідувач побачить:

до змісту ↑

Робота з користувачами

ВордПрес не надає візуальних інструментів, щоб редагувати права та ролі користувачів. Для цього перейдіть до Ultimate Member > User Roles, оберіть бажану роль для налаштування, наведіть на неї курсор та натисніть Edit.

Для кожної з них можна дозволити або заборонити:

  • змінювати зовнішній вигляд та опції свого профілю;
  • дії після входу, виходу, видалення облікового запису;
  • приватність для інших користувачів;
  • індексування пошуковими системами профілю.

Переваги:

  • сторінку входу до адмін-частини ніхто не побачить.

Недоліки:

  • доведеться встановити ще один плагін (що може негативно вплинути на швидкість роботи сайту).
до змісту ↑

Форма розширеної реєстрації WordPress без плагіну

Цей спосіб підійде для просунутих користувачів, які хочуть повністю контролювати роботу свого ресурсу. Для початківців рекомендую користуватися першими двома.

У файл 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.

Переваги:

  • повний контроль за реєстрацією та її формою,
  • можна використовувати на сторінці з будь-якою адресою.

Недоліки:

  • перевірка на працездатність коду при кожному оновленні WordPress, активних теми та плагінів.

Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, блоги на WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *