wpinc.ru wordpress WP Inc

Добавление дополнительных полей в регистрацию WordPress с помощью кода

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

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

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

Хотя существуют плагины для расширения регистрации, реализация через код даёт полный контроль, не нагружает сайт и позволяет интегрироваться с другими вашими решениями.

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

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

function wpinc_add_custom_register_fields() {
    $phone = ( isset( $_POST['wpinc_phone'] ) ) ? sanitize_text_field( $_POST['wpinc_phone'] ) : '';
    echo '<p>'
       . '<label for="wpinc_phone">Телефон (обязательно)</label><br />'
       . '<input type="text" name="wpinc_phone" id="wpinc_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />'
       . '</p>';
}
add_action( 'register_form', 'wpinc_add_custom_register_fields' );

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

Валидация и проверка дополнительных полей

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

function wpinc_validate_custom_register_fields( $errors, $sanitized_user_login, $user_email ) {
    if ( empty( $_POST['wpinc_phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['wpinc_phone'] ) ) {
        $errors->add( 'wpinc_phone_error', '<strong>ОШИБКА</strong>: Пожалуйста, введите корректный номер телефона.' );
    }
    return $errors;
}
add_filter( 'registration_errors', 'wpinc_validate_custom_register_fields', 10, 3 );

В данном примере телефон должен содержать от 10 до 15 цифр, возможно с плюсом в начале, иначе пользователь увидит ошибку.

Сохранение дополнительных полей при регистрации

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

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

Теперь номер телефона сохраняется в мета-данных пользователя с ключом wpinc_phone.

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

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

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

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

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

Использование дополнительных данных в шаблонах и плагинах

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

function wpinc_get_user_phone() {
    $user_id = get_current_user_id();
    if ( ! $user_id ) {
        return '';
    }
    return get_user_meta( $user_id, 'wpinc_phone', true );
}

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

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

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

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

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

Безопасность и защита данных

При добавлении дополнительных полей важно соблюдать несколько правил:

  • Всегда используйте sanitize_text_field() или другие функции очистки данных перед сохранением.
  • Проверяйте права пользователя при сохранении данных в профиле.
  • Избегайте хранения чувствительной информации без шифрования.
  • Валидация должна быть максимально строгой, чтобы не допустить вредоносных данных.

Соблюдение этих правил поможет избежать проблем с безопасностью и стабильностью сайта.

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

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

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