Часто стандартной формы регистрации WordPress недостаточно для сбора нужной информации от пользователей. Например, может потребоваться добавить дополнительные поля, такие как номер телефона, дата рождения или согласие с правилами. В этой статье мы разберём, как добавить дополнительное поле в форму регистрации WordPress без использования плагинов, а также как сохранить и отобразить эти данные.
Почему стоит создавать дополнительное поле без плагинов
Использование плагинов для расширения формы регистрации удобно, но не всегда оправдано. Лишние плагины могут замедлять сайт, создавать конфликты и усложнять поддержку. Если вы хотите иметь полный контроль над кодом и минимизировать нагрузку, лучше добавить поле вручную, используя хуки и фильтры WordPress.
К тому же, такой подход позволяет глубже понять внутреннюю работу системы регистрации и адаптировать поведение под специфические требования проекта.
Добавляем дополнительное поле в форму регистрации WordPress
Для начала нам нужно добавить новое поле в стандартную форму регистрации. В WordPress используется хук register_form, который позволяет вставить дополнительный HTML-код в форму.
function wphost_add_custom_registration_field() {
$phone = ( ! empty( $_POST['wphost_phone'] ) ) ? sanitize_text_field( $_POST['wphost_phone'] ) : '';
echo '<p>';
echo '<label for="wphost_phone">Номер телефона <span class="required">*</span></label><br />';
echo '<input type="text" name="wphost_phone" id="wphost_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />';
echo '</p>';
}
add_action('register_form', 'wphost_add_custom_registration_field');Этот код добавит поле «Номер телефона» в форму регистрации. Обратите внимание, что мы сразу выводим введённое значение, если форма была отправлена с ошибкой, чтобы пользователь не терял введённые данные.
Валидация дополнительного поля при регистрации
Важно проверить, что пользователь действительно заполнил дополнительное поле, если оно обязательно. Для этого используем хук registration_errors, который позволяет добавить свои ошибки проверки.
function wphost_validate_custom_registration_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wphost_phone'] ) || ! preg_match('/^[0-9\+\-\s]{6,20}$/', $_POST['wphost_phone'] ) ) {
$errors->add('wphost_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона.');
}
return $errors;
}
add_filter('registration_errors', 'wphost_validate_custom_registration_field', 10, 3);Здесь мы проверяем, что поле не пустое и соответствует простому паттерну из цифр, плюсов, дефисов и пробелов от 6 до 20 символов. Это базовая проверка, которую можно адаптировать под свои требования.
Сохранение дополнительного поля в пользовательских метаданных
После успешной регистрации нужно сохранить введённый номер телефона. Для этого используем хук user_register, который срабатывает сразу после создания пользователя.
function wphost_save_custom_registration_field( $user_id ) {
if ( ! empty( $_POST['wphost_phone'] ) ) {
update_user_meta( $user_id, 'wphost_phone', sanitize_text_field( $_POST['wphost_phone'] ) );
}
}
add_action('user_register', 'wphost_save_custom_registration_field');В результате номер телефона сохранится в метаданных пользователя с ключом wphost_phone. Это удобный способ хранить дополнительные данные, не затрагивая таблицу пользователей напрямую.
Отображение дополнительного поля в профиле пользователя в админке
Чтобы администраторы могли видеть и изменять этот номер телефона, добавим поле в страницу редактирования профиля пользователя в админке.
function wphost_show_custom_user_profile_field( $user ) {
$phone = get_user_meta( $user->ID, 'wphost_phone', true );
?>
<h3>Дополнительные данные</h3>
<table class="form-table">
<tr>
<th><label for="wphost_phone">Номер телефона</label></th>
<td>
<input type="text" name="wphost_phone" id="wphost_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action('show_user_profile', 'wphost_show_custom_user_profile_field');
add_action('edit_user_profile', 'wphost_show_custom_user_profile_field');Теперь поле появится на страницах редактирования профиля пользователя.
Сохранение изменений дополнительного поля в админке
Чтобы сохранить внесённые изменения, нужно обработать сохранение профиля, используя хук personal_options_update и edit_user_profile_update.
function wphost_save_custom_user_profile_field( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['wphost_phone'] ) ) {
update_user_meta( $user_id, 'wphost_phone', sanitize_text_field( $_POST['wphost_phone'] ) );
}
}
add_action('personal_options_update', 'wphost_save_custom_user_profile_field');
add_action('edit_user_profile_update', 'wphost_save_custom_user_profile_field');Итог: работающая система дополнительного поля регистрации
Мы рассмотрели полный цикл — добавление поля, его валидацию, сохранение при регистрации, отображение и редактирование в профиле пользователя. Такой подход позволяет гибко расширять регистрацию без сторонних плагинов.
Если же вы хотите расширить функционал и добавить, например, мультишаговую регистрацию или интеграцию с CRM, обратите внимание на профессиональные решения, например, плагин Clearfy Pro, который оптимизирует и расширяет возможности WordPress.
Дополнительные советы и рекомендации
- Для более сложных форм можно использовать JavaScript для динамической валидации и улучшения UX.
- Не забывайте об обязательной валидации на стороне сервера — это защита от некорректных или вредоносных данных.
- Для хранения структурированных данных можно использовать пользовательские таблицы, если метаданных становится слишком много.
- Следите за безопасностью и не выводите пользовательские данные без экранирования.