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

Добавление дополнительного поля телефона в форму регистрации WordPress — задача, с которой часто сталкиваются разработчики, желающие расширить стандартный функционал. В этой статье подробно рассмотрим, как с помощью хуков WordPress добавить поле "Телефон", правильно вывести его в форме, сохранить данные и сделать валидацию, чтобы пользователь вводил корректный номер.

Добавление поля телефона в форму регистрации WordPress

Для начала нужно добавить новое поле в форму регистрации. Это делается через хук register_form. Ниже пример функции, которая добавляет поле телефона с атрибутами и placeholder:

function wpdo_add_phone_field() {
    $phone = ( isset( $_POST['wpdo_phone'] ) ) ? sanitize_text_field( $_POST['wpdo_phone'] ) : '';
    echo '<p>'
        . '<label for="wpdo_phone">Телефон <span style="color:red;">*</span></label>'
        . '<input type="text" name="wpdo_phone" id="wpdo_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />'
        . '</p>';
}
add_action( 'register_form', 'wpdo_add_phone_field' );

Эта функция выводит поле телефона в стандартной форме регистрации WordPress. Обратите внимание, что мы используем префикс wpdo_ для избежания конфликтов с другими плагинами.

Валидация поля телефона при регистрации

Чтобы не допустить ввод некорректных номеров, нужно добавить проверку введённых данных. Для этого используем фильтр registration_errors. В нем проверим, что поле заполнено и соответствует формату телефона.

function wpdo_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wpdo_phone'] ) ) {
        $errors->add( 'phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите номер телефона.' );
    } else {
        $phone = trim( $_POST['wpdo_phone'] );
        // Пример проверки формата телефона: только цифры, от 10 до 15 символов
        if ( ! preg_match( '/^\+?[0-9]{10,15}$/', $phone ) ) {
            $errors->add( 'phone_error_format', '<strong>Ошибка</strong>: Неверный формат номера телефона. Используйте только цифры, можно с плюсом в начале.' );
        }
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpdo_validate_phone_field', 10, 3 );

Такая проверка гарантирует, что поле не пустое и номер телефона соответствует простому шаблону. При необходимости регулярное выражение можно адаптировать под другие форматы.

Сохранение поля телефона в мета-поле пользователя

После успешной регистрации нужно сохранить телефон пользователя в его метаданных. Для этого используем хук user_register:

function wpdo_save_phone_field( $user_id ) {
    if ( ! empty( $_POST['wpdo_phone'] ) ) {
        update_user_meta( $user_id, 'wpdo_phone', sanitize_text_field( $_POST['wpdo_phone'] ) );
    }
}
add_action( 'user_register', 'wpdo_save_phone_field' );

Теперь номер телефона будет храниться в базе данных, и его можно вывести в профиле пользователя или использовать в других целях.

Вывод телефона в профиле пользователя в админке

Чтобы администратор мог видеть и редактировать телефон пользователя, добавим поле в профиль. Для этого используем хуки show_user_profile, edit_user_profile, а для сохранения — personal_options_update и edit_user_profile_update.

function wpdo_show_phone_field( $user ) {
    $phone = get_user_meta( $user->ID, 'wpdo_phone', true );
    ?>
    <h3>Дополнительная информация</h3>
    <table class="form-table">
        <tr>
            <th><label for="wpdo_phone">Телефон</label></th>
            <td>
                <input type="text" name="wpdo_phone" id="wpdo_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
                <br /><span class="description">Введите номер телефона пользователя</span>
            </td>
        </tr>
    </table>
    <?php
}
add_action( 'show_user_profile', 'wpdo_show_phone_field' );
add_action( 'edit_user_profile', 'wpdo_show_phone_field' );

function wpdo_save_phone_field_profile( $user_id ) {
    if ( ! current_user_can( 'edit_user', $user_id ) ) {
        return false;
    }
    if ( isset( $_POST['wpdo_phone'] ) ) {
        update_user_meta( $user_id, 'wpdo_phone', sanitize_text_field( $_POST['wpdo_phone'] ) );
    }
}
add_action( 'personal_options_update', 'wpdo_save_phone_field_profile' );
add_action( 'edit_user_profile_update', 'wpdo_save_phone_field_profile' );

Это позволит удобно управлять телефоном пользователя прямо из админки WordPress.

Примеры плагинов для расширения регистрации

Если не хочется писать код самостоятельно, можно использовать плагины, которые позволяют добавлять и валидировать поля в регистрационной форме. Например:

  • Profile Builder — универсальный плагин для создания и настройки форм регистрации с возможностью добавления любых полей;
  • Clearfy Pro — плагин оптимизации и безопасности, в котором есть инструменты для настройки форм и полей регистрации;
  • User Registration — простой и удобный конструктор форм регистрации с поддержкой валидации.

Однако если нужен точечный контроль и оптимальный код, лучше написать решение самостоятельно, как показано выше.

Как отключить autoload в WordPress для оптимизации базы данных
15.03.2026
WooCommerce: отладка проблем с оплатой через Яндекс.Кассу после обновления
16.05.2026
WooCommerce: отладка проблем с оплатой через PayPal после обновления
25.04.2026
Как удалить загрузку шрифтов в WordPress для ускорения сайта
08.03.2026
WooCommerce: отладка проблем с оплатой через QIWI после обновления
09.06.2026