В стандартной регистрации WordPress есть всего несколько полей: имя пользователя, email и пароль. Однако часто возникает задача расширить форму регистрации дополнительными полями, например, добавить номер телефона, дату рождения или согласие с правилами сайта. В этой статье мы подробно рассмотрим, как можно добавить кастомные поля в форму регистрации WordPress с помощью кода и популярных плагинов, а также как сохранить и отобразить эти данные.
Почему стоит добавлять дополнительные поля в форму регистрации WordPress
Расширение формы регистрации позволяет собрать больше информации о пользователях сразу на этапе регистрации, что удобно для последующей персонализации, сегментации аудитории или обеспечения безопасности. Например, поле с номером телефона поможет организовать двухфакторную аутентификацию, а дата рождения — отправлять персональные поздравления.
Кроме того, дополнительные поля могут служить фильтром для предотвращения регистрации ботов и спам-аккаунтов, если добавить, например, чекбокс с подтверждением правил.
Примеры полезных дополнительных полей
- Телефон
- Дата рождения
- Компания или должность
- Согласие с политикой конфиденциальности
- Промокод или реферальный код
Добавление полей в форму регистрации через functions.php
Самый гибкий способ — добавить поля программно через файл темы functions.php. Рассмотрим пример, как добавить поле "Номер телефона" в форму регистрации, проверить его заполнение и сохранить в метаданные пользователя.
Шаг 1. Вывод поля в форме регистрации
function wpedu_add_phone_field() {
?>
<p>
<label for="phone">Номер телефона</label><br/>
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( wp_unslash( $_POST['phone'] ?? '' ) ); ?>" size="25" />
</p>
<?php
}
add_action( 'register_form', 'wpedu_add_phone_field' );Этот код добавляет текстовое поле с id и именем phone непосредственно в форму регистрации.
Шаг 2. Валидация поля
Чтобы убедиться, что пользователь ввел номер телефона, добавим проверку:
function wpedu_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['phone'] ) ) {
$errors->add( 'phone_error', 'Пожалуйста, введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpedu_validate_phone_field', 10, 3 );Здесь мы проверяем, что поле не пустое и соответствует простому регулярному выражению для номера телефона.
Шаг 3. Сохранение данных
После успешной регистрации сохраним номер телефона в метаданных пользователя:
function wpedu_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wpedu_save_phone_field' );Отображение и редактирование дополнительных полей в профиле пользователя
Чтобы администраторы и пользователи могли видеть и редактировать добавленное поле, нужно расширить страницы профиля.
Добавление поля в профиль пользователя в админке
function wpedu_show_phone_in_profile( $user ) {
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="phone">Номер телефона</label></th>
<td>
<input type="text" name="phone" id="phone" value="<?php echo esc_attr( get_user_meta( $user->ID, 'phone', true ) ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpedu_show_phone_in_profile' );
add_action( 'edit_user_profile', 'wpedu_show_phone_in_profile' );Сохранение поля при редактировании профиля
function wpedu_save_phone_in_profile( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'personal_options_update', 'wpedu_save_phone_in_profile' );
add_action( 'edit_user_profile_update', 'wpedu_save_phone_in_profile' );Использование плагинов для добавления полей в регистрацию
Если вам не хочется писать код, можно использовать готовые плагины. Вот несколько популярных и надежных решений:
1. User Registration — Custom Registration Form, Login and User Profile for WordPress
Очень удобный плагин с визуальным конструктором форм. Позволяет добавлять любые поля, настраивать валидацию, интегрироваться с email-маркетингом.
2. Profile Builder
Плагин для создания кастомных форм регистрации и редактирования профиля с поддержкой пользовательских полей и ролей.
3. RegistrationMagic
Полнофункциональный инструмент для создания регистрационных форм с возможностью сбора любых данных и контроля доступа.
При использовании плагинов обычно не требуется писать код, но иногда стоит добавить PHP-фильтры для тонкой настройки.
Советы по безопасности и удобству
Добавляя дополнительные поля, не забывайте:
- Обязательно валидировать пользовательский ввод, чтобы избежать XSS и SQL-инъекций.
- Использовать
sanitize_text_fieldи другие функции очистки данных. - Добавлять подсказки и placeholder в поля для удобства пользователей.
- Проверять, что новые поля не конфликтуют с плагинами безопасности и кеширования.
- Тестировать регистрацию с новыми полями на разных устройствах и браузерах.
Таким образом, добавление пользовательских полей в форму регистрации WordPress — задача вполне решаемая и полезная для расширения функционала сайта. Вы можете выбрать либо программный способ для максимального контроля, либо плагины для быстрого результата.