Зачем добавлять дополнительные поля в форму регистрации WordPress
Стандартная форма регистрации WordPress содержит минимальный набор полей: имя пользователя, email и пароль. Однако в реальных проектах часто требуется собирать от пользователей больше информации — например, телефон, дату рождения, согласие на рассылку или дополнительные данные для профиля. Это позволяет лучше сегментировать аудиторию, персонализировать коммуникацию и улучшать качество сбора данных.
В этой статье подробно разберём, как расширить форму регистрации WordPress дополнительными полями, сохранить данные и вывести их в профиле пользователя. Примеры будут приведены с использованием чистого кода без плагинов, а также с рекомендациями по плагинам для упрощения задачи.
Как добавить поле в форму регистрации через хуки WordPress
Подключение дополнительных полей к форме регистрации требует работы с несколькими хуками:
register_form— для вывода полей на страницу регистрации;registration_errors— для проверки введённых данных и вывода ошибок;user_register— для сохранения новых данных пользователя.
Рассмотрим пример добавления поля «Телефон».
Вывод поля «Телефон» в форме
function wpwebsite_add_phone_field() {
$phone = isset( $_POST['wpwebsite_phone'] ) ? sanitize_text_field( $_POST['wpwebsite_phone'] ) : '';
echo '<p><label for="wpwebsite_phone">Телефон</label><br/>'
. '<input type="text" name="wpwebsite_phone" id="wpwebsite_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" /></p>';
}
add_action( 'register_form', 'wpwebsite_add_phone_field' );Этот код добавит поле Телефон в стандартную форму регистрации.
Проверка введённого телефона
function wpwebsite_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpwebsite_phone'] ) || ! preg_match( '/^\+?[0-9]{10,15}$/', $_POST['wpwebsite_phone'] ) ) {
$errors->add( 'wpwebsite_phone_error', '<strong>Ошибка</strong>: введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpwebsite_validate_phone_field', 10, 3 );Здесь мы проверяем, что телефон введён и соответствует формату (10-15 цифр с возможным + в начале).
Сохранение телефона в мета-поле пользователя
function wpwebsite_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wpwebsite_phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['wpwebsite_phone'] ) );
}
}
add_action( 'user_register', 'wpwebsite_save_phone_field' );Данные сохраняются в метаполе «phone» для пользователя.
Отображение дополнительного поля в профиле пользователя
Чтобы администраторы могли видеть и редактировать поле «Телефон» в админке WordPress, добавим соответствующий вывод и сохранение.
Добавляем поле в профиль пользователя
function wpwebsite_show_phone_field_in_profile( $user ) {
$phone = get_user_meta( $user->ID, 'phone', true );
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr><th><label for="wpwebsite_phone">Телефон</label></th><td>
<input type="text" name="wpwebsite_phone" id="wpwebsite_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
</td></tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpwebsite_show_phone_field_in_profile' );
add_action( 'edit_user_profile', 'wpwebsite_show_phone_field_in_profile' );Сохраняем изменения в профиле
function wpwebsite_save_phone_field_in_profile( $user_id ) {
if ( current_user_can( 'edit_user', $user_id ) ) {
if ( isset( $_POST['wpwebsite_phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['wpwebsite_phone'] ) );
}
}
}
add_action( 'personal_options_update', 'wpwebsite_save_phone_field_in_profile' );
add_action( 'edit_user_profile_update', 'wpwebsite_save_phone_field_in_profile' );Теперь телефон можно редактировать у пользователя в админке WordPress.
Использование плагинов для расширения формы регистрации
Если вы не хотите писать код самостоятельно, можно использовать плагины, которые позволяют добавлять поля в регистрацию и управление ими:
- User Registration — удобный конструктор форм с поддержкой любых полей;
- Profile Builder — расширенные возможности профилей и регистрации;
- Register Plus Redux — простой плагин для добавления полей и проверки.
Для интеграции с плагинами WPShop, например, Clearfy Pro можно использовать функции оптимизации и расширения безопасности регистрации.
Как протестировать и отладить добавленные поля
После добавления полей обязательно протестируйте регистрацию с корректными и некорректными данными. Проверьте:
- Отображение новых полей на странице регистрации;
- Вывод ошибок при неправильном вводе;
- Сохранение данных и отображение в профиле;
- Корректную работу с плагинами безопасности и кэширования.
Если форма регистрации кастомизирована вашим шаблоном или плагином, убедитесь, что хуки не переписываются.
Заключение
Добавление дополнительных полей в форму регистрации WordPress — простая, но часто востребованная задача. Используя хуки register_form, registration_errors и user_register, можно гибко расширять функционал без сторонних плагинов. Для более сложных форм и удобства управления рекомендуем сочетать кастомный код с проверенными плагинами. Обязательно тестируйте изменения, чтобы избежать проблем с регистрацией пользователей.