wpcontrol.ru wordpress WPControl.ru

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

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

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

Использование кода вместо плагинов даёт несколько преимуществ:

  • Минимальный вес сайта — отсутствие лишних плагинов.
  • Гибкость в настройке и стилизации полей.
  • Контроль над валидацией и обработкой данных.
  • Лёгкая интеграция с другими функциями и хуками WordPress.

Такой подход особенно актуален для тех, кто хочет получить специфичные данные от пользователей и не использовать универсальные решения.

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

Для расширения формы регистрации нам нужно использовать хук register_form. Он позволяет добавить HTML код в форму. Например, добавим поле «Телефон».

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

Этот код добавит текстовое поле «Телефон» в форму регистрации на стандартной странице WordPress.

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

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

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

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

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

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

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

Теперь введённый телефон будет храниться и доступен для вывода в админке или на сайте.

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

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

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

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

Для сохранения изменений в админке используем хуки personal_options_update и edit_user_profile_update:

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

Готовое решение и рекомендации

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

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

Для улучшения UX можно добавить маску ввода телефона с помощью JavaScript или подключить jQuery плагин. Это улучшит качество вводимых данных и снизит количество ошибок.

Итоги

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

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙