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