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

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

Почему важно уникальное поле в форме регистрации WordPress

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

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

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

Для начала добавим поле в форму регистрации. Используем хук register_form:

function wpbuy_add_custom_registration_field() {  $value = ( isset( $_POST['wpbuy_custom_field'] ) ) ? sanitize_text_field( $_POST['wpbuy_custom_field'] ) : '';  echo '<p><label for="wpbuy_custom_field">Идентификатор партнёра (уникальный)<br /><input type="text" name="wpbuy_custom_field" id="wpbuy_custom_field" class="input" value="' . esc_attr( $value ) . '" size="25" /></label></p>';}add_action( 'register_form', 'wpbuy_add_custom_registration_field' );

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

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

Чтобы проверить, что введённое значение уникально, используем хук registration_errors. Проверим, что поле заполнено и не повторяется в базе:

function wpbuy_validate_custom_registration_field( $errors, $sanitized_user_login, $user_email ) {  if ( empty( $_POST['wpbuy_custom_field'] ) ) {    $errors->add( 'wpbuy_custom_field_error', '<strong>ОШИБКА</strong>: Пожалуйста, введите идентификатор партнёра.' );  } else {    global $wpdb;    $custom_value = sanitize_text_field( $_POST['wpbuy_custom_field'] );    $user_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'wpbuy_custom_field' AND meta_value = %s", $custom_value ) );    if ( $user_id ) {      $errors->add( 'wpbuy_custom_field_error', '<strong>ОШИБКА</strong>: Такой идентификатор уже существует. Пожалуйста, используйте другой.' );    }  }  return $errors;}add_filter( 'registration_errors', 'wpbuy_validate_custom_registration_field', 10, 3 );

Сохранение уникального поля при регистрации

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

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

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

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

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

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

function wpbuy_show_custom_field_in_profile( $user ) {  $value = get_user_meta( $user->ID, 'wpbuy_custom_field', true );  ?>  <h3>Дополнительные данные</h3>  <table class="form-table">    <tr>      <th><label for="wpbuy_custom_field">Идентификатор партнёра (уникальный)</label></th>      <td>        <input type="text" name="wpbuy_custom_field" id="wpbuy_custom_field" value="<?php echo esc_attr( $value ); ?>" class="regular-text" />        <br />        <span class="description">Уникальный идентификатор, используемый для учёта партнёрских ссылок.</span>      </td>    </tr>  </table>  <?php }add_action( 'show_user_profile', 'wpbuy_show_custom_field_in_profile' );add_action( 'edit_user_profile', 'wpbuy_show_custom_field_in_profile' );

Сохранение изменений в профиле

function wpbuy_save_custom_field_profile( $user_id ) {  if ( ! current_user_can( 'edit_user', $user_id ) ) {    return false;  }  if ( isset( $_POST['wpbuy_custom_field'] ) ) {    $new_value = sanitize_text_field( $_POST['wpbuy_custom_field'] );    global $wpdb;    $exists_user_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'wpbuy_custom_field' AND meta_value = %s AND user_id != %d", $new_value, $user_id ) );    if ( ! $exists_user_id ) {      update_user_meta( $user_id, 'wpbuy_custom_field', $new_value );    } else {      add_action( 'user_profile_update_errors', function( $errors ) {        $errors->add( 'wpbuy_custom_field_error', '<strong>ОШИБКА</strong>: Такой идентификатор уже используется другим пользователем.' );      } );    }  }}add_action( 'personal_options_update', 'wpbuy_save_custom_field_profile' );add_action( 'edit_user_profile_update', 'wpbuy_save_custom_field_profile' );

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

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

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

  • Clearfy Pro — оптимизация и расширение функционала, включая кастомные поля
  • WPGPT — помогает генерировать формы регистрации с кастомными полями на базе ИИ
  • Плагины для пользовательских полей, например Advanced Custom Fields (ACF) или Profile Builder с настройкой уникальности

Однако ручное добавление кода даёт больше контроля и производительности.

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

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

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

Итог

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

Как добавить поле с вариантами в вывод товара WooCommerce для удобства выбора
07.01.2026
Как использовать REST API в WordPress для автоматизации задач
17.12.2025
Автоматическое удаление неактивных вариантов товаров в WooCommerce по расписанию
30.06.2026
Как использовать WPRemark для автоматического модерирования комментариев в WordPress
14.02.2026
Как использовать методы оптимизации базы данных WordPress для ускорения сайта
28.03.2026