Как создать дополнительное поле в форме регистрации WordPress без плагинов

Часто стандартной формы регистрации 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.
  • Не забывайте об обязательной валидации на стороне сервера — это защита от некорректных или вредоносных данных.
  • Для хранения структурированных данных можно использовать пользовательские таблицы, если метаданных становится слишком много.
  • Следите за безопасностью и не выводите пользовательские данные без экранирования.
Как автоматизировать удаление ревизий записей в WordPress для оптимизации базы данных
29.01.2026
Как избежать конфликтов между плагинами в WordPress
31.03.2026
Как удалить временные файлы кеша WooCommerce без плагинов
13.06.2026
Как установить и настроить Nginx для WordPress
21.02.2026
Как добавить автоматическое обновление плагинов WordPress без помощи SSH
24.03.2026