wpmoney.ru wordpress WP Money

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

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

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

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

Кроме того, ручная реализация учит лучше понимать архитектуру WordPress и работу хуков, что полезно для дальнейшей разработки.

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

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

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

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

Валидация добавленных полей в форме регистрации

Очень важно проверить введённые данные, чтобы не допустить ошибочного или вредоносного ввода. Для этого используем фильтр registration_errors. Пример валидации поля «Телефон»:

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

В этом примере проверяется, что телефон не пустой и соответствует регулярному выражению, допускающему от 10 до 15 цифр с опциональным плюсом в начале.

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

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

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

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

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

Чтобы администраторы могли видеть и редактировать значение поля «Телефон» в профиле пользователя, добавим соответствующие поля в админ-панель.

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

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

Сохранение поля из профиля

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

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

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

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

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

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

×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее