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