Добавление дополнительных полей в стандартную форму регистрации WordPress — частая задача при создании кастомизированных сайтов, где нужно собирать больше информации о пользователях. В этой статье мы рассмотрим, как с помощью хуков WordPress расширить форму регистрации, валидировать новые поля и сохранять данные в мета-поля пользователя.
Почему важно использовать хуки для расширения формы регистрации WordPress
Стандартная форма регистрации WordPress содержит минимальный набор полей: имя пользователя, email и пароль. Для сбора дополнительной информации (например, телефонов, адресов, согласий) нельзя просто изменить HTML шаблона, так как форма генерируется функцией register_form() и обработка данных происходит внутри ядра.
Использование хуков — правильный и безопасный способ добавить новые поля, так как они позволяют:
- Добавлять HTML поля в форму регистрации;
- Выполнять валидацию введённых данных;
- Сохранять дополнительные данные в мета-поля пользователя;
- Интегрироваться с другими плагинами и темами без конфликтов.
Для этого используются хуки register_form, registration_errors и user_register.
Добавление поля в форму регистрации через хук register_form
Начнём с вывода дополнительного поля. Допустим, мы хотим добавить поле «Телефон».
function wpteam_add_phone_field_to_registration() {
$phone = ( ! empty( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
?>
<p>
<label for="phone">Телефон<br /></label>
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" />
</p>
<?php
}
add_action( 'register_form', 'wpteam_add_phone_field_to_registration' );Функция выводит поле с именем phone. Значение сохраняется в случае ошибки регистрации, чтобы пользователь не вводил повторно.
Валидация введённого поля через хук registration_errors
Важно проверить, что пользователь ввёл корректный телефон. Если поле пустое или не соответствует шаблону, регистрация должна остановиться с ошибкой.
function wpteam_validate_phone_field_registration( $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', 'wpteam_validate_phone_field_registration', 10, 3 );Здесь мы используем регулярное выражение, позволяющее вводить телефон с 10-15 цифрами, с опциональным знаком «+» в начале.
Сохранение дополнительного поля при регистрации через хук user_register
После успешной регистрации нужно сохранить телефон в мета-данных пользователя.
function wpteam_save_phone_field_registration( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wpteam_save_phone_field_registration' );Функция update_user_meta сохранит значение в таблицу usermeta, что удобно для последующего получения и вывода.
Вывод и редактирование поля телефона в профиле пользователя
Чтобы администраторы и сами пользователи могли видеть и редактировать телефон, добавим поле в профиль.
function wpteam_show_phone_field_in_profile( $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( 'show_user_profile', 'wpteam_show_phone_field_in_profile' );
add_action( 'edit_user_profile', 'wpteam_show_phone_field_in_profile' );
function wpteam_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', 'wpteam_save_phone_field_in_profile' );
add_action( 'edit_user_profile_update', 'wpteam_save_phone_field_in_profile' );Теперь телефон можно увидеть и отредактировать в профиле пользователя в админке.
Примеры плагинов для добавления полей в форму регистрации
Если вы предпочитаете готовые решения, рассмотрите эти плагины:
- Clearfy Pro — плагин оптимизации с возможностями расширения форм и управления регистрацией;
- WPCommunity — для сайтов с регистрацией и сообществом, поддерживает кастомные поля;
- User Registration — бесплатный плагин с визуальным конструктором форм и поддержкой дополнительных полей.
Однако собственная реализация через хуки даёт максимальный контроль и минимальный вес сайта.
Как протестировать и отладить добавленные поля регистрации
После добавления кода важно проверить несколько сценариев:
- Регистрация с пустым полем телефона — должна появиться ошибка;
- Ввод некорректного телефона (например, буквы) — ошибка;
- Правильный ввод — регистрация успешна, и телефон сохраняется;
- Отображение и редактирование телефона в профиле пользователя;
- Проверка безопасности: очистка данных через
sanitize_text_fieldи права доступа на редактирование.
Рекомендуется использовать режим отладки WordPress и логи веб-сервера для выявления ошибок.
Итог
Расширение формы регистрации WordPress дополнительными полями — задача, которую решают три основных хука: register_form для вывода поля, registration_errors для валидации и user_register для сохранения данных. Такой подход гарантирует совместимость с ядром и плагинами, а также удобство для пользователей и администраторов.
Приведённые примеры кода легко адаптируются под любые поля и бизнес-логику. Используйте их как основу для своих проектов.