Стандартная форма регистрации в WordPress подходит не всегда: кому-то нужно добавить дополнительные поля, кому-то — изменить дизайн или вовсе отключить регистрацию. В этой статье подробно разберём, как изменить или удалить стандартную форму регистрации в WordPress, используя плагины и собственные функции. Рассмотрим примеры кода и полезные приёмы.
Почему стоит менять или отключать стандартную регистрацию WordPress
По умолчанию WordPress предоставляет простую форму регистрации по адресу wp-login.php?action=register. Она базовая, без дополнительных полей и проверки. Это создаёт проблемы, если вы хотите:
- Добавить кастомные поля (например, номер телефона, согласие с политикой конфиденциальности).
- Изменить внешний вид и логику регистрации.
- Ограничить регистрацию, например, закрыть её для всех или только для определённых пользователей.
- Защититься от спама и ботов.
Оставлять стандартную регистрацию без изменений не всегда удобно и безопасно, поэтому рассмотрим варианты кастомизации.
Как отключить регистрацию в WordPress
Если вам нужно полностью закрыть регистрацию, проще всего сделать это через настройки:
- Перейдите в Консоль » Настройки » Общие.
- Снимите галочку с пункта Любой желающий может зарегистрироваться.
- Сохраните изменения.
Если же вы хотите отключить регистрацию программно и перенаправлять пользователей с формы регистрации на другую страницу, добавьте в файл functions.php вашей темы следующий код:
function wpcourse_disable_registration() {
if (isset($_GET['action']) && $_GET['action'] === 'register') {
wp_redirect(home_url());
exit;
}
}
add_action('login_init', 'wpcourse_disable_registration');Этот код проверит, если пользователь пытается открыть форму регистрации, и перенаправит его на главную страницу сайта.
Добавление дополнительных полей в форму регистрации WordPress
Стандартная форма регистрации содержит только поля для имени пользователя и email. Для более гибкой регистрации часто нужно добавить свои поля. Рассмотрим пример добавления поля «Телефон».
Добавляем поле «Телефон» в форму регистрации
Для этого используем хуки WordPress. Добавим поле с помощью register_form:
function wpcourse_register_add_phone_field() {
$phone = (isset($_POST['wpcourse_phone'])) ? esc_attr($_POST['wpcourse_phone']) : '';
?>
<p>
<label for="wpcourse_phone">Телефон<br />
<input type="text" name="wpcourse_phone" id="wpcourse_phone" class="input" value="<?php echo $phone; ?>" size="25" /></label>
</p>
<?php
}
add_action('register_form', 'wpcourse_register_add_phone_field');Валидация поля «Телефон»
Чтобы не допустить пустое или неверное значение, добавим проверку на сервере через фильтр registration_errors:
function wpcourse_register_validate_phone($errors, $sanitized_user_login, $user_email) {
if (empty($_POST['wpcourse_phone']) || !preg_match('/^\+?\d{10,15}$/', $_POST['wpcourse_phone'])) {
$errors->add('wpcourse_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона.');
}
return $errors;
}
add_filter('registration_errors', 'wpcourse_register_validate_phone', 10, 3);Сохранение дополнительного поля в профиль пользователя
После успешной регистрации нужно сохранить номер телефона в метаполе пользователя:
function wpcourse_register_save_phone($user_id) {
if (!empty($_POST['wpcourse_phone'])) {
update_user_meta($user_id, 'wpcourse_phone', sanitize_text_field($_POST['wpcourse_phone']));
}
}
add_action('user_register', 'wpcourse_register_save_phone');Просмотр и редактирование нового поля в профиле пользователя
Чтобы администратор мог видеть и менять номер телефона, добавим поле в профиль пользователя:
function wpcourse_show_phone_in_profile($user) {
?>
<h3>Дополнительные данные</h3>
<table class="form-table">
<tr>
<th><label for="wpcourse_phone">Телефон</label></th>
<td>
<input type="text" name="wpcourse_phone" id="wpcourse_phone" value="<?php echo esc_attr(get_user_meta($user->ID, 'wpcourse_phone', true)); ?>" class="regular-text" /><br />
<span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php
}
add_action('show_user_profile', 'wpcourse_show_phone_in_profile');
add_action('edit_user_profile', 'wpcourse_show_phone_in_profile');И сохранение при изменении профиля:
function wpcourse_save_phone_in_profile($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
update_user_meta($user_id, 'wpcourse_phone', sanitize_text_field($_POST['wpcourse_phone']));
}
add_action('personal_options_update', 'wpcourse_save_phone_in_profile');
add_action('edit_user_profile_update', 'wpcourse_save_phone_in_profile');Лучшие плагины для кастомизации регистрации в WordPress
Если хотите упростить задачу и получить расширенный функционал без программирования, рассмотрите эти плагины:
- User Registration — удобный конструктор форм с поддержкой дополнительных полей, валидации и интеграций.
- WP User Manager — расширенное управление пользователями с кастомными регистрационными формами и профилями.
- Profile Builder — мощный плагин для создания регистрационных и профайл форм с множеством опций.
- Theme My Login — позволяет изменить внешний вид стандартных страниц регистрации и входа, а также добавить дополнительные поля.
Все эти плагины поддерживают добавление кастомных полей, капчу, email-подтверждение и другие полезные функции.
Как перенаправлять пользователей после регистрации
Иногда нужно изменить страницу, на которую пользователь попадает после успешной регистрации. Это можно сделать с помощью хуков WordPress.
function wpcourse_registration_redirect() {
return home_url('/welcome/'); // Замените на нужный URL
}
add_filter('registration_redirect', 'wpcourse_registration_redirect');Так вы сможете направить новых пользователей на страницу приветствия или с инструкциями.
Защита формы регистрации от спама
Форма регистрации часто атакуется ботами, поэтому важно добавить защиту. Вот несколько советов:
- Используйте капчу — Google reCAPTCHA или плагины с поддержкой капчи.
- Добавляйте скрытые поля (honeypot) для ловли ботов.
- Ограничьте частоту регистраций с одного IP с помощью плагинов безопасности.
- Используйте плагины антиспама, например, Akismet.
Пример добавления honeypot поля:
function wpcourse_register_add_honeypot() {
?>
<p style="display:none;">
<label for="wpcourse_hp">Leave this field empty</label>
<input type="text" name="wpcourse_hp" id="wpcourse_hp" value="" />
</p>
<?php
}
add_action('register_form', 'wpcourse_register_add_honeypot');
function wpcourse_register_honeypot_check($errors, $sanitized_user_login, $user_email) {
if (!empty($_POST['wpcourse_hp'])) {
$errors->add('wpcourse_hp_error', '<strong>Ошибка</strong>: Ошибка валидации.');
}
return $errors;
}
add_filter('registration_errors', 'wpcourse_register_honeypot_check', 10, 3);