Стандартная форма регистрации WordPress включает минимум информации: имя пользователя, email и пароль. В большинстве случаев этого недостаточно, особенно если вы хотите собирать дополнительную информацию о пользователях или реализовать кастомные процессы регистрации. В этой статье мы подробно разберем, как изменить существующие поля регистрации, добавить новые, а также корректно сохранить и отобразить эти данные.
Почему стоит менять стандартную форму регистрации WordPress
Стандартная регистрация очень простая и подходит далеко не для всех проектов. Например, интернет-магазинам, сообществам или образовательным платформам часто требуется указать дополнительные сведения — номер телефона, дату рождения, город, роль пользователя и т.п.
Добавление новых полей в форму регистрации позволяет:
- Собрать больше данных о пользователях для дальнейшей работы.
- Настроить процесс регистрации под свои бизнес-задачи.
- Улучшить взаимодействие с пользователем, задавая релевантные вопросы.
- Расширить профили пользователей и использовать эти данные в дальнейшем — для рассылок, фильтрации, персонализации.
Однако важно делать это грамотно и безопасно, чтобы не сломать логику WordPress и не создать уязвимости.
Как добавить новые поля в форму регистрации WordPress
Для добавления новых полей нам нужно воспользоваться хуком register_form. Этот хук позволяет вывести дополнительный HTML в форму регистрации.
Пример кода из файла functions.php вашей темы или собственного плагина:
function wpconfig_add_custom_register_fields() {
?>
<p>
<label for="phone">Телефон</label><br/>
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( wpconfig_get_post_value('phone') ); ?>" size="25" />
</p>
<?php
}
add_action('register_form', 'wpconfig_add_custom_register_fields');Здесь мы добавляем поле "Телефон" с сохранением введенного значения, если регистрация не прошла и форма обновилась с ошибками.
Функция для безопасного получения значения из POST
Чтобы избежать повторного ввода данных, используем вспомогательную функцию:
function wpconfig_get_post_value($key) {
return isset($_POST[$key]) ? sanitize_text_field($_POST[$key]) : '';
}Как валидировать и проверять значения новых полей при регистрации
Простое добавление полей недостаточно — нужно проверить корректность данных и обязательность заполнения. Для этого используем хук registration_errors.
Пример валидации для поля телефона:
function wpconfig_validate_custom_register_fields($errors, $sanitized_user_login, $user_email) {
if (empty($_POST['phone']) || !preg_match('/^\+?\d{10,15}$/', $_POST['phone'])) {
$errors->add('phone_error', '<strong>Ошибка</strong>: введите корректный номер телефона.');
}
return $errors;
}
add_filter('registration_errors', 'wpconfig_validate_custom_register_fields', 10, 3);Здесь мы проверяем, что поле не пустое и соответствует шаблону номера телефона — от 10 до 15 цифр с опциональным плюсом в начале.
Как сохранить новые поля в профиле пользователя
После успешной регистрации надо сохранить данные в мета-поля пользователя. Для этого применим хук user_register.
function wpconfig_save_custom_register_fields($user_id) {
if (!empty($_POST['phone'])) {
update_user_meta($user_id, 'phone', sanitize_text_field($_POST['phone']));
}
}
add_action('user_register', 'wpconfig_save_custom_register_fields');Теперь номер телефона будет храниться как пользовательское мета-значение с ключом phone.
Как отобразить новые поля в профиле пользователя в админке
Чтобы администратор мог видеть и редактировать новые поля, добавим их в форму редактирования профиля в админке. Используем хуки show_user_profile и edit_user_profile.
function wpconfig_show_extra_profile_fields($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', 'wpconfig_show_extra_profile_fields');
add_action('edit_user_profile', 'wpconfig_show_extra_profile_fields');И добавим сохранение при редактировании профиля:
function wpconfig_save_extra_profile_fields($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (!empty($_POST['phone'])) {
update_user_meta($user_id, 'phone', sanitize_text_field($_POST['phone']));
} else {
delete_user_meta($user_id, 'phone');
}
}
add_action('personal_options_update', 'wpconfig_save_extra_profile_fields');
add_action('edit_user_profile_update', 'wpconfig_save_extra_profile_fields');Плагины для расширения формы регистрации WordPress
Если кодить не хочется, можно использовать готовые решения. Вот несколько популярных плагинов:
- User Registration – удобный визуальный конструктор форм регистрации с поддержкой любых полей.
- Profile Builder – расширенные возможности по кастомизации форм и управлению профилями.
- Registration Magic – мощный инструмент с аналитикой и защитой от спама.
Эти плагины позволяют не только добавлять поля, но и настраивать логику регистрации без программирования.
Советы по безопасности при изменении формы регистрации
При добавлении новых полей убедитесь, что вы:
- Используете
sanitize_text_fieldи другие функции очистки для данных. - Проверяете формат и обязательность полей.
- Не позволяете сохранять вредоносный код.
- Используете nonce-поля, если делаете AJAX-формы.
- Внимательно тестируете все сценарии регистрации и редактирования профиля.
Это поможет избежать уязвимостей и сохранить стабильность работы сайта.
Итоги
Изменение и добавление новых полей в форму регистрации WordPress — задача частая и вполне решаемая своими силами. С помощью хуков register_form, registration_errors и user_register можно быстро расширить стандартную форму, а вывод и редактирование данных сделать удобным. При этом важно не забывать про безопасность и валидацию.
В статье приведены базовые примеры, которые можно адаптировать под свои задачи и развивать дальше, например, добавлять интеграцию с CRM, отправку уведомлений или автоматическую проверку данных.