В стандартной форме регистрации WordPress доступны только базовые поля: имя пользователя, электронная почта и пароль. Однако в некоторых случаях требуется собрать дополнительную информацию от пользователя при регистрации, например, номер телефона, ссылку на профиль в соцсетях или дату рождения. В этой статье мы подробно разберём, как добавить собственное поле в форму регистрации WordPress, сохранить данные и вывести их в админке.
Почему важно добавлять дополнительные поля в форму регистрации WordPress
Расширение формы регистрации позволяет получить больше информации о пользователях сразу при их создании. Это особенно полезно для сайтов с сообществом, интернет-магазинов или сервисов, где нужно сегментировать аудиторию по определённым параметрам.
Без дополнительного кода или плагинов стандартная форма регистрации в WordPress не предоставляет возможности добавить кастомные поля. При этом готовые плагины, такие как Clearfy Pro, включают функционал для расширения форм, но иногда удобнее добавить поле самостоятельно, чтобы точно контролировать поведение и внешний вид.
Добавление поля в форму регистрации — подробный разбор
Для добавления дополнительного поля нужно выполнить три основных шага:
- Вывести поле в форме регистрации.
- Проверить и сохранить данные из поля после отправки формы.
- Отобразить и редактировать данные в профиле пользователя в админке.
1. Вывод дополнительного поля в форме регистрации
Для вывода поля используем хук register_form. Добавим поле «Телефон» как пример:
function wpsystem_add_phone_field() {
$phone = isset( $_POST['wpsystem_phone'] ) ? esc_attr( $_POST['wpsystem_phone'] ) : '';
echo '<p>'
. '<label for="wpsystem_phone">Телефон</label><br/>'
. '<input type="text" name="wpsystem_phone" id="wpsystem_phone" class="input" value="' . $phone . '" size="25" />'
. '</p>';
}
add_action( 'register_form', 'wpsystem_add_phone_field' );
Так мы добавили в форму новый текстовый инпут с именем wpsystem_phone.
2. Валидация и сохранение данных при регистрации
После отправки формы нужно проверить, что пользователь ввёл корректный телефон, и если нет, вывести ошибку. Для этого используем фильтр registration_errors. Затем сохраним данные в метаполе пользователя через хук user_register.
function wpsystem_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpsystem_phone'] ) || ! preg_match( '/^\+?[0-9]{7,15}$/', $_POST['wpsystem_phone'] ) ) {
$errors->add( 'wpsystem_phone_error', 'Пожалуйста, введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpsystem_validate_phone_field', 10, 3 );
function wpsystem_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wpsystem_phone'] ) ) {
update_user_meta( $user_id, 'wpsystem_phone', sanitize_text_field( $_POST['wpsystem_phone'] ) );
}
}
add_action( 'user_register', 'wpsystem_save_phone_field' );
3. Отображение и редактирование поля в профиле пользователя
Чтобы администратор мог видеть и менять номер телефона, добавим поле в профиль пользователя в админке:
function wpsystem_show_phone_field_profile( $user ) {
$phone = get_user_meta( $user->ID, 'wpsystem_phone', true );
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="wpsystem_phone">Телефон</label></th>
<td>
<input type="text" name="wpsystem_phone" id="wpsystem_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpsystem_show_phone_field_profile' );
add_action( 'edit_user_profile', 'wpsystem_show_phone_field_profile' );
function wpsystem_save_phone_field_profile( $user_id ) {
if ( current_user_can( 'edit_user', $user_id ) && ! empty( $_POST['wpsystem_phone'] ) ) {
update_user_meta( $user_id, 'wpsystem_phone', sanitize_text_field( $_POST['wpsystem_phone'] ) );
}
}
add_action( 'personal_options_update', 'wpsystem_save_phone_field_profile' );
add_action( 'edit_user_profile_update', 'wpsystem_save_phone_field_profile' );
Альтернативные решения и плагины для расширения формы регистрации
Если вы не хотите писать код самостоятельно, можно использовать плагины, которые позволяют добавлять поля в форму регистрации визуально и с расширенными возможностями:
- Profile Builder — мощный плагин для создания кастомных форм регистрации и профилей;
- User Registration — простой и удобный конструктор форм;
- Expert Review — плагин с расширенными возможностями для работы с пользовательскими данными, включая кастомные поля.
В некоторых случаях стоит обратить внимание на плагины из WPSHOP, которые интегрируются с WP и позволяют упростить работу с пользователями.
Выводы и лучшие практики
Добавление дополнительных полей в форму регистрации — частая задача для кастомизации сайтов на WordPress. Главное — не забывать про валидацию данных и безопасность. Используйте префиксы в именах функций и полей, чтобы избежать конфликтов. Сохраняйте данные в метаполях пользователя, чтобы их легко было получать и изменять.
Приведённый пример с полем «Телефон» можно адаптировать под любые другие данные, изменив валидацию и тип поля. Такой подход позволяет гибко настраивать регистрацию под нужды проекта.