Часто стандартной формы регистрации WordPress бывает недостаточно для сбора нужных данных от пользователей. В этой статье мы рассмотрим, как добавить пользовательское поле в форму регистрации WordPress, обработать и сохранить введённые данные, а также вывести их в админке и обеспечить безопасность процесса.
Почему стоит добавить кастомное поле в форму регистрации WordPress
Стандартная форма регистрации содержит минимум полей: имя пользователя, email и пароль. Но для многих проектов необходимо собирать дополнительную информацию — например, номер телефона, дату рождения, согласие с условиями или персональные настройки.
Добавление таких полей позволяет более гибко управлять пользовательской базой и улучшать взаимодействие с аудиторией. Однако важно правильно обрабатывать и хранить данные, чтобы не нарушать безопасность и не создавать уязвимости.
В этой статье мы добавим поле «Телефон» в форму регистрации, проверим его на корректность, сохраним в метаданных пользователя и выведем в админке.
Добавление поля «Телефон» в форму регистрации WordPress
Для начала добавим поле на страницу регистрации. Используем хук register_form. Ниже пример функции wptemplates_add_phone_field, которая выводит дополнительное поле:
function wptemplates_add_phone_field() {
$phone = ( ! empty( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
echo '<p>';
echo '<label for="phone">Телефон <span class="required">*</span></label><br/>';
echo '<input type="text" name="phone" id="phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />';
echo '</p>';
}
add_action( 'register_form', 'wptemplates_add_phone_field' );Эта функция добавляет поле «Телефон» с обязательным заполнением. При повторной загрузке формы мы сохраняем введённое значение, чтобы не терять данные при ошибках.
Валидация и проверка введённых данных
Важно проверить, что пользователь ввёл корректный номер телефона и не оставил поле пустым. Для этого используем хук registration_errors и функцию wptemplates_validate_phone_field:
function wptemplates_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['phone'] ) ) {
$errors->add( 'phone_error', '<strong>ОШИБКА</strong>: Пожалуйста, введите номер телефона.' );
} else {
$phone = sanitize_text_field( $_POST['phone'] );
if ( ! preg_match( '/^\+?[0-9]{10,15}$/', $phone ) ) {
$errors->add( 'phone_error_format', '<strong>ОШИБКА</strong>: Неверный формат номера телефона.' );
}
}
return $errors;
}
add_filter( 'registration_errors', 'wptemplates_validate_phone_field', 10, 3 );Здесь мы проверяем, что поле не пустое и соответствует шаблону: допустимы цифры и опциональный знак «+» в начале, длина от 10 до 15 символов. При ошибках выводится сообщение, и регистрация не проходит.
Сохранение пользовательского поля в метаданных
После успешной регистрации нужно сохранить значение телефона в метаданых пользователя. Для этого используем хук user_register и функцию wptemplates_save_phone_field:
function wptemplates_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wptemplates_save_phone_field' );Теперь номер телефона будет сохраняться и привязываться к аккаунту пользователя.
Отображение поля «Телефон» в профиле пользователя в админке
Чтобы администратору было удобно видеть и редактировать номер телефона, добавим поле в профиль пользователя. Используем хуки show_user_profile и edit_user_profile:
function wptemplates_show_phone_field( $user ) {
$phone = get_user_meta( $user->ID, 'phone', true );
?>
<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( $phone ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wptemplates_show_phone_field' );
add_action( 'edit_user_profile', 'wptemplates_show_phone_field' );И добавим обработчик сохранения:
function wptemplates_save_phone_field_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', 'wptemplates_save_phone_field_profile' );
add_action( 'edit_user_profile_update', 'wptemplates_save_phone_field_profile' );Дополнительные плагины для расширения возможностей регистрации
Если вам не хочется писать код или нужны более продвинутые варианты, советую обратить внимание на эти плагины:
- User Registration – Custom Registration Form, Login and User Profile for WordPress — визуальный конструктор форм с поддержкой кастомных полей и валидации.
- Profile Builder — позволяет добавлять поля и управлять регистрацией, профилями и ролями.
- Ultimate Member — мощный плагин для создания сообществ с расширенными профилями и формами.
Эти решения помогут быстро настроить регистрацию без программирования, но если нужна гибкость — лучше писать собственный код.
Советы по безопасности и UX при добавлении полей регистрации
При работе с пользовательскими полями важно:
- Обязательно валидировать и санитизировать все входящие данные.
- Добавлять защиту от CSRF с помощью
wp_nonce_field(). - Не хранить чувствительные данные в открытом виде, если это требуется.
- Давать понятные сообщения об ошибках — это улучшает опыт пользователя.
- Делать поля обязательными только если действительно нужно, чтобы не отпугнуть пользователей.
Также продумайте, как новые данные будут использоваться, чтобы не перегружать форму регистрации.