Многие проекты на WordPress требуют сбора дополнительной информации при регистрации пользователей, помимо стандартных полей (логин, email, пароль). В этой статье мы рассмотрим, как добавить дополнительные поля в форму регистрации WordPress, как корректно обработать и сохранить эти данные, а также как вывести их в профиле пользователя.
Почему стоит добавлять дополнительные поля в форму регистрации WordPress
Стандартная форма регистрации WordPress ограничена базовыми полями, и не всегда этого достаточно. Например, вам может понадобиться собрать:
- Телефон пользователя
- Адрес
- Профессию
- Ссылки на соцсети
- Любые другие специфичные данные, которые важны для вашего проекта
Добавление кастомных полей позволяет лучше сегментировать аудиторию, персонализировать сервис и расширять функционал сайта.
Добавляем новые поля в форму регистрации (register_form)
Для добавления полей используем хук register_form. Он позволяет вывести дополнительный HTML прямо в форму регистрации. Пример добавления поля «Телефон»:
function wpurok_register_form_extra_fields() {
$phone = ( ! empty( $_POST['wpurok_phone'] ) ) ? sanitize_text_field( $_POST['wpurok_phone'] ) : '';
echo '<p>';
echo '<label for="wpurok_phone">Телефон</label><br />';
echo '<input type="text" name="wpurok_phone" id="wpurok_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />';
echo '</p>';
}
add_action( 'register_form', 'wpurok_register_form_extra_fields' );Этот код добавит поле «Телефон» в форму регистрации, и при ошибках сохранит введённое значение.
Валидация данных дополнительных полей (registration_errors)
Чтобы гарантировать корректность данных, нужно валидировать их при отправке формы. Для этого используем хук registration_errors:
function wpurok_validate_register_extra_fields( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpurok_phone'] ) || ! preg_match( '/^\+?[0-9]{10,15}$/', $_POST['wpurok_phone'] ) ) {
$errors->add( 'wpurok_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpurok_validate_register_extra_fields', 10, 3 );Здесь мы проверяем, что телефон не пустой и соответствует шаблону из 10-15 цифр с возможным знаком + в начале.
Сохранение дополнительных данных (user_register)
После успешной регистрации нужно сохранить данные в мета-поле пользователя. Для этого используем хук user_register:
function wpurok_save_register_extra_fields( $user_id ) {
if ( ! empty( $_POST['wpurok_phone'] ) ) {
update_user_meta( $user_id, 'wpurok_phone', sanitize_text_field( $_POST['wpurok_phone'] ) );
}
}
add_action( 'user_register', 'wpurok_save_register_extra_fields' );Так данные о телефоне сохранятся в базе и будут доступны через get_user_meta.
Вывод и редактирование дополнительных полей в профиле пользователя
Чтобы администратор мог видеть и редактировать эти данные, добавим поле в профиль пользователя в админке с помощью хуков show_user_profile и edit_user_profile:
function wpurok_show_extra_profile_fields( $user ) {
$phone = get_user_meta( $user->ID, 'wpurok_phone', true );
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="wpurok_phone">Телефон</label></th>
<td>
<input type="text" name="wpurok_phone" id="wpurok_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
<br /><span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpurok_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'wpurok_show_extra_profile_fields' );
function wpurok_save_extra_profile_fields( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['wpurok_phone'] ) ) {
update_user_meta( $user_id, 'wpurok_phone', sanitize_text_field( $_POST['wpurok_phone'] ) );
}
}
add_action( 'personal_options_update', 'wpurok_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'wpurok_save_extra_profile_fields' );Теперь вы и администраторы можете видеть и менять телефон в профиле пользователя.
Пример использования дополнительного поля в шаблонах и плагинах
Чтобы вывести дополнительный номер телефона на сайте, например, в шаблоне автора, используйте:
echo esc_html( get_user_meta( $author_id, 'wpurok_phone', true ) );Если вы разрабатываете плагин, который зависит от этих данных, применяйте ту же функцию для получения значения.
Советы по безопасности и совместимости
При работе с дополнительными полями важно:
- Всегда очищать входящие данные через
sanitize_text_fieldили соответствующие функции. - Проверять права пользователя при сохранении данных в профиле.
- Использовать nonce поля, если добавляете свои формы вне стандартных.
- Тестировать совместимость с установленными плагинами безопасности и кэширования.
Альтернативные решения с плагинами
Если вы не хотите писать код, можете использовать плагины, например:
- Clearfy Pro — оптимизация и расширение функционала, включая управление регистрацией;
- WPCommunity — расширяет возможности регистрации и профилей в соцсетях;
- Плагины для кастомизации форм регистрации, например, Profile Builder, но они обычно тяжелее и сложнее для кастомизации.
Однако, собственный код даёт полный контроль и лёгкость поддержки.
Итог
Добавление и обработка дополнительных полей в регистрации WordPress — задача, которую можно решить с помощью нескольких хуков: register_form, registration_errors, user_register. Это позволяет собрать дополнительную информацию о пользователях без плагинов и с полной кастомизацией. Не забывайте про безопасность и валидацию.