Форма регистрации в WordPress по умолчанию содержит минимальный набор полей: имя пользователя, email и пароль. Однако часто требуется расширить эту форму дополнительными полями — например, для сбора информации о пользователе, согласия с правилами или выбора роли. В этой статье мы подробно рассмотрим, как добавить свои поля в форму регистрации WordPress, обработать их и сохранить данные, а также показать эти данные в админке.
Зачем добавлять дополнительные поля в форму регистрации WordPress
Часто стандартных полей регистрации недостаточно для полноценного профиля пользователя. Например, магазин на WooCommerce может требовать указать телефон, адрес; сообщество — дату рождения или интересы; обучающий сайт — уровень знаний. Добавление полей помогает собрать необходимые данные сразу при регистрации и улучшить качество взаимодействия с пользователями.
Добавление пользовательских полей в форму регистрации WordPress
Чтобы добавить поля, нужно воспользоваться хуком register_form, который позволяет вывести свой HTML в форму регистрации. Рассмотрим пример добавления поля "Телефон":
add_action('register_form', 'wp3_add_phone_field');
function wp3_add_phone_field() {
$phone = ( isset( \$_POST['phone'] ) ) ? sanitize_text_field( \$_POST['phone'] ) : '';
echo '<p>'
. '<label for="phone">Телефон <span class="required">*</span></label>'
. '<input type="text" name="phone" id="phone" class="input" value="'. esc_attr($phone) .'" size="25" />'
. '</p>';
}
Этот код добавит поле "Телефон" в форму регистрации и при ошибке заполнения сохранит введённое значение.
Валидация пользовательских полей при регистрации
Очень важно проверять введённые данные и информировать пользователя об ошибках. Для этого используется хук registration_errors:
add_filter('registration_errors', 'wp3_validate_phone_field', 10, 3);
function wp3_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>: введите корректный номер телефона.' );
}
return $errors;
}
В этом примере мы проверяем, что телефон заполнен и соответствует простому формату — от 10 до 15 цифр, с опциональным плюсом в начале.
Сохранение дополнительных полей в профиль пользователя
После успешной регистрации нужно сохранить дополнительные поля. Для этого используем хук user_register:
add_action('user_register', 'wp3_save_phone_field');
function wp3_save_phone_field( $user_id ) {
if ( ! empty( \$_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( \$_POST['phone'] ) );
}
}
Данные сохраняются в мета-поле пользователя с ключом phone. Если нужно, можно сохранить в отдельную таблицу, но для большинства задач мета-поля подходят идеально.
Отображение дополнительных полей в профиле пользователя в админке
Чтобы администраторы могли видеть и редактировать новые поля, добавим их в профиль пользователя на странице редактирования:
add_action('show_user_profile', 'wp3_show_phone_field');
add_action('edit_user_profile', 'wp3_show_phone_field');
function wp3_show_phone_field( $user ) { ?>
<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( get_user_meta( $user->ID, 'phone', true ) ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php }
add_action('personal_options_update', 'wp3_save_phone_field_admin');
add_action('edit_user_profile_update', 'wp3_save_phone_field_admin');
function wp3_save_phone_field_admin( $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'] ) );
}
}
Так админ может видеть и менять номер телефона пользователя.
Примеры полезных плагинов для расширения формы регистрации
Если не хочется писать код, можно использовать готовые решения. Например:
- User Registration — простой конструктор форм с визуальным редактором.
- Profile Builder — расширенный плагин с множеством опций и хуков.
- Clearfy Pro — оптимизация и расширение функционала, включая формы.
Эти плагины позволяют легко создавать формы с любыми полями, настраивать валидацию и интеграции.
Расширение: как добавить checkbox "Согласен с правилами" в форму регистрации
Пример простого чекбокса с обязательным подтверждением:
add_action('register_form', 'wp3_add_terms_checkbox');
function wp3_add_terms_checkbox() {
$checked = ( isset( \$_POST['terms'] ) ) ? 'checked' : '';
echo '<p>'
. '<label for="terms">'
. '<input type="checkbox" name="terms" id="terms" '. $checked .' />'
. ' Я согласен с <a href="/terms" target="_blank">правилами</a> сайта <span class="required">*</span>'
. '</label>'
. '</p>';
}
add_filter('registration_errors', 'wp3_validate_terms_checkbox', 10, 3);
function wp3_validate_terms_checkbox( $errors, $sanitized_user_login, $user_email ) {
if ( ! isset( \$_POST['terms'] ) ) {
$errors->add( 'terms_error', '<strong>Ошибка</strong>: необходимо согласиться с правилами.' );
}
return $errors;
}
Так вы обезопасите себя от регистраций без согласия с условиями.
Вывод дополнительных данных на фронтенде и в профиле пользователя
Чтобы отобразить дополнительные поля на странице профиля или в шаблоне, используйте функцию:
function wp3_show_user_phone( $user_id ) {
$phone = get_user_meta( $user_id, 'phone', true );
if ( $phone ) {
echo '<p><strong>Телефон:</strong> ' . esc_html( $phone ) . '</p>';
}
}
Пример использования — вызов wp3_show_user_phone(get_current_user_id()) в шаблоне.
Заключение
Добавление пользовательских полей в форму регистрации — задача, часто возникающая при создании сайтов на WordPress. С помощью хуков register_form, registration_errors и user_register можно добавить поля, проверить их и сохранить данные без плагинов. Если нужна гибкость и удобство, рекомендуем обратить внимание на плагины User Registration, Profile Builder или Clearfy Pro.
Такой подход позволит собрать всю необходимую информацию при регистрации и улучшить взаимодействие с пользователями.