wpurok.ru wordpress WPUrok

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

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

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

Стандартная форма регистрации WordPress ограничена базовыми полями, и не всегда этого достаточно. Например, вам может понадобиться собрать:

  • Телефон пользователя
  • Адрес
  • Профессию
  • Ссылки на соцсети
  • Любые другие специфичные данные, которые важны для вашего проекта

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

Добавляем новые поля в форму регистрации (register_form)

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

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

Этот код добавит поле «Телефон» в форму регистрации, и при ошибках сохранит введённое значение.

Валидация данных дополнительных полей (registration_errors)

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

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

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

Сохранение дополнительных данных (user_register)

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

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

Так данные о телефоне сохранятся в базе и будут доступны через get_user_meta.

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

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

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

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

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

Пример использования дополнительного поля в шаблонах и плагинах

Чтобы вывести дополнительный номер телефона на сайте, например, в шаблоне автора, используйте:

echo esc_html( get_user_meta( $author_id, 'wpurok_phone', true ) );

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

Советы по безопасности и совместимости

При работе с дополнительными полями важно:

  • Всегда очищать входящие данные через sanitize_text_field или соответствующие функции.
  • Проверять права пользователя при сохранении данных в профиле.
  • Использовать nonce поля, если добавляете свои формы вне стандартных.
  • Тестировать совместимость с установленными плагинами безопасности и кэширования.

Альтернативные решения с плагинами

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

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

Однако, собственный код даёт полный контроль и лёгкость поддержки.

Итог

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

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее