В стандартной форме регистрации WordPress доступны только базовые поля: имя пользователя, email и пароль. Но что делать, если вам нужно собрать дополнительную информацию от пользователей при регистрации? Например, телефон, город или дату рождения. В этой статье мы подробно разберем, как добавить дополнительные поля в форму регистрации WordPress, обработать эти данные и сохранить их в пользовательских метаданных.
Почему важно добавлять кастомные поля в форму регистрации WordPress
Часто стандартных полей регистрации недостаточно для полноценного взаимодействия с пользователями. Кастомные поля позволяют:
- Собирать дополнительную информацию для персонализации
- Использовать данные для маркетинга и аналитики
- Добавлять пользовательские роли и права на основе введенных данных
Но важно делать это правильно, чтобы не нарушать безопасность сайта и не ухудшать UX.
Добавление поля в форму регистрации с помощью хуков WordPress
Чтобы добавить поле, нам нужно воспользоваться хуком register_form, который отвечает за отображение формы регистрации. Добавим, например, поле «Телефон».
function wpquiz_add_phone_field() {
$phone = ( isset( $_POST['wpquiz_phone'] ) ) ? sanitize_text_field( $_POST['wpquiz_phone'] ) : '';
echo '<p><label for="wpquiz_phone">Телефон<br><input type="text" name="wpquiz_phone" id="wpquiz_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" /></label></p>';
}
add_action( 'register_form', 'wpquiz_add_phone_field' );Этот код добавит новое текстовое поле в форму регистрации. Обратите внимание на префикс wpquiz_ в названии поля — это хорошая практика для избежания конфликтов.
Валидация данных дополнительного поля
Важно проверить введенные пользователем данные до создания аккаунта. Воспользуемся хуком registration_errors для проверки поля «Телефон».
function wpquiz_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpquiz_phone'] ) || ! preg_match( '/^\+?[0-9]{10,15}$/', $_POST['wpquiz_phone'] ) ) {
$errors->add( 'wpquiz_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpquiz_validate_phone_field', 10, 3 );Здесь мы проверяем, что поле не пустое и соответствует простому регулярному выражению для номеров телефонов в международном формате.
Сохранение дополнительного поля в метаданных пользователя
После успешной регистрации нужно сохранить введённый телефон. Для этого используем хук user_register, который срабатывает после создания пользователя.
function wpquiz_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wpquiz_phone'] ) ) {
update_user_meta( $user_id, 'wpquiz_phone', sanitize_text_field( $_POST['wpquiz_phone'] ) );
}
}
add_action( 'user_register', 'wpquiz_save_phone_field' );Теперь номер телефона будет храниться в базе данных в таблице wp_usermeta с ключом wpquiz_phone.
Отображение дополнительного поля в профиле пользователя
Чтобы администратор или сам пользователь мог видеть и менять этот номер в панели управления, добавим поле в профиль пользователя.
function wpquiz_show_phone_profile_field( $user ) {
$phone = get_user_meta( $user->ID, 'wpquiz_phone', true );
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="wpquiz_phone">Телефон</label></th>
<td>
<input type="text" name="wpquiz_phone" id="wpquiz_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpquiz_show_phone_profile_field' );
add_action( 'edit_user_profile', 'wpquiz_show_phone_profile_field' );И не забудем сохранить изменения:
function wpquiz_save_phone_profile_field( $user_id ) {
if ( current_user_can( 'edit_user', $user_id ) ) {
update_user_meta( $user_id, 'wpquiz_phone', sanitize_text_field( $_POST['wpquiz_phone'] ) );
}
}
add_action( 'personal_options_update', 'wpquiz_save_phone_profile_field' );
add_action( 'edit_user_profile_update', 'wpquiz_save_phone_profile_field' );Использование плагинов для добавления полей регистрации
Если не хочется писать код, можно воспользоваться плагинами. Вот несколько проверенных вариантов:
- User Registration – Custom Registration Form, Login and User Profile for WordPress. Позволяет создавать формы регистрации с кастомными полями через визуальный конструктор.
- Profile Builder. Мощный плагин для расширения стандартных форм регистрации и профилей.
- WP User Manager. Еще один популярный инструмент с возможностью добавления любых полей.
Все они совместимы с большинством тем и плагинов, регулярно обновляются и имеют бесплатные версии с базовым функционалом.
Заключение
Добавление дополнительного поля в форму регистрации WordPress — задача вполне решаемая как вручную через хуки и фильтры, так и с помощью плагинов. Главное — правильно валидировать данные, сохранять их и отображать в нужных местах в админке. Такой подход расширяет возможности сайта и позволяет собирать полезную информацию о пользователях.