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

Часто возникает необходимость добавить в форму регистрации WordPress дополнительные поля для сбора информации о пользователях. Например, поле «Никнейм», «Телефон» или «Компания». В этой статье мы разберем, как добавить кастомное поле в стандартную форму регистрации WordPress, сохранить данные в базу и вывести их в профиле пользователя.

Почему стоит добавлять кастомные поля в регистрацию WordPress

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

Рассмотрим пример: добавим поле «Телефон» в форму регистрации, проверим его заполнение, сохраним данные и отобразим в профиле.

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

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

function wpapp_add_phone_field_to_registration() {
    $phone = ( ! empty( $_POST['wpapp_phone'] ) ) ? sanitize_text_field( $_POST['wpapp_phone'] ) : '';
    echo '<p>'
        . '<label for="wpapp_phone">Телефон</label><br/>'
        . '<input type="text" name="wpapp_phone" id="wpapp_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />'
        . '</p>';
}
add_action( 'register_form', 'wpapp_add_phone_field_to_registration' );

Этот код добавляет поле ввода с именем wpapp_phone в форму регистрации.

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

Чтобы убедиться, что поле заполнено корректно, используем фильтр registration_errors. Если поле пустое или содержит недопустимые символы, выдадим ошибку.

function wpapp_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wpapp_phone'] ) ) {
        $errors->add( 'wpapp_phone_error', '<strong>Ошибка:</strong> Пожалуйста, укажите телефон.' );
    } else {
        $phone = sanitize_text_field( $_POST['wpapp_phone'] );
        if ( ! preg_match( '/^\+?[0-9\-\s]{7,15}$/', $phone ) ) {
            $errors->add( 'wpapp_phone_error', '<strong>Ошибка:</strong> Некорректный формат телефона.' );
        }
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpapp_validate_phone_field', 10, 3 );

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

Сохранение данных дополнительного поля

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

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

Теперь номер телефона сохраняется в базе данных и доступен через get_user_meta( $user_id, 'wpapp_phone', true ).

Отображение дополнительного поля в профиле пользователя

Для удобства администраторов и самих пользователей полезно видеть и редактировать дополнительное поле в админке. Добавим поле в профиль с помощью хуков show_user_profile и edit_user_profile:

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

Для сохранения изменений добавим функцию обработки:

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

Использование плагинов для расширения регистрации

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

  • Clearfy Pro — плагин оптимизации и улучшения WordPress, который содержит модуль расширения формы регистрации.
  • WPCommunity — комплексное решение для сообщества с расширенными полями и регистрацией.

Они позволяют создавать сложные формы с валидацией без программирования.

Заключение

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

Наш каталог плагинов WordPress