wpload.ru wordpress WPLoad.ru

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

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

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

Хотя существуют плагины для расширения формы регистрации, например, User Registration или WP User Manager, использование кода даёт максимум гибкости и контроля над процессом. Вы сможете точно настроить валидацию, хранение и отображение данных без лишних зависимостей.

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

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

Для начала нам нужно вывести дополнительное поле в форме регистрации. Сделаем это с помощью хука register_form.

function wpload_add_custom_registration_field() {
    $phone = ( ! empty( $_POST['wpload_phone'] ) ) ? sanitize_text_field( $_POST['wpload_phone'] ) : '';
    ?>
    <p>
        <label for="wpload_phone">Номер телефона<br />
            <input type="text" name="wpload_phone" id="wpload_phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" /></label>
    </p>
    <?php
}
add_action('register_form', 'wpload_add_custom_registration_field');

В этом коде мы добавляем текстовое поле для ввода номера телефона с уникальным именем wpload_phone. Значение поля при повторной загрузке формы сохраняется.

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

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

function wpload_validate_custom_registration_field( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wpload_phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['wpload_phone'] ) ) {
        $errors->add( 'wpload_phone_error', '<strong>Ошибка</strong>: Введите корректный номер телефона в формате +1234567890' );
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpload_validate_custom_registration_field', 10, 3 );

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

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

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

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

В результате пользователь получит дополнительное поле с номером телефона, сохранённое в базе.

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

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

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

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

Теперь номер телефона можно просматривать и изменять в профиле пользователя через админку.

Используем дополнительное поле в шаблонах сайта

Чтобы вывести номер телефона пользователя на сайте, например, на странице профиля, используйте функцию:

function wpload_get_user_phone( $user_id ) {
    return get_user_meta( $user_id, 'wpload_phone', true );
}

Пример вывода в шаблоне:

$phone = wpload_get_user_phone( get_current_user_id() );
if ( $phone ) {
    echo '<p>Ваш номер телефона: ' . esc_html( $phone ) . '</p>';
}

Плагины для расширенной регистрации и зачем они могут пригодиться

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

  • WPGPT — с AI-поддержкой для создания форм и автоматизации
  • Clearfy Pro — для оптимизации и расширения функционала WordPress
  • WPRemark — для улучшенного управления пользователями и комментариями

Но если задача — добавить одно-два поля, то проще и эффективнее использовать кастомный код, как описано выше.

Подводим итоги и рекомендации

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

Обязательно следите за безопасностью: фильтруйте и экранируйте все данные, проверяйте права доступа при редактировании.

Используйте описанные хуки и функции с префиксом wpload_, чтобы избежать конфликтов с другими плагинами.

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

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше