Стандартная форма регистрации WordPress содержит базовые поля, такие как имя пользователя, email и пароль. Однако часто возникает необходимость добавить дополнительные поля, например, номер телефона, дату рождения или согласие с правилами. В этой статье мы подробно разберем, как добавить новое поле в форму регистрации, как правильно валидировать введенные данные и сохранять их в базе данных.
Почему важно добавлять и валидировать дополнительные поля регистрации
Добавление дополнительных полей позволяет собирать больше информации о пользователях, что полезно для сегментирования, персонализации контента и маркетинга. Но если не настроить валидацию, пользователи могут вводить некорректные данные, что приведет к ошибкам и проблемам в дальнейшем.
Поэтому задача состоит не только в добавлении поля, но и в проверке его содержимого на стороне сервера, чтобы избежать мусорных или вредоносных данных.
Кроме того, необходимо сохранить данные так, чтобы они были доступны для дальнейшего использования, например, в профиле пользователя.
Добавление поля в форму регистрации WordPress
Для добавления пользовательского поля используется хук register_form. Он позволяет вывести дополнительный HTML, который появится в форме регистрации.
Пример добавления поля «Номер телефона»:
add_action('register_form', 'wpgenerate_add_phone_field');
function wpgenerate_add_phone_field() {
$phone = ( isset( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
?>
<p>
<label for="phone">Номер телефона<br />
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" /></label>
</p>
<?php
}Этот код выведет поле с именем phone, значение которого сохранится в случае ошибки регистрации и повторного отображения формы.
Валидация дополнительного поля при регистрации
Самое важное — проверить, что пользователь ввел корректный номер телефона. Для этого используем хук registration_errors, который позволяет добавить свои проверки и вывести ошибки.
add_filter( 'registration_errors', 'wpgenerate_validate_phone_field', 10, 3 );
function wpgenerate_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['phone'] ) ) {
$errors->add( 'phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона, состоящий из 10-15 цифр.' );
}
return $errors;
}В данном примере мы проверяем, что номер телефона содержит от 10 до 15 цифр с опциональным знаком + в начале. Если поле пустое или не соответствует шаблону, добавляется ошибка.
Сохранение дополнительного поля в профиле пользователя
После успешной регистрации нам нужно сохранить номер телефона в метаданных пользователя. Для этого используем хук user_register:
add_action( 'user_register', 'wpgenerate_save_phone_field' );
function wpgenerate_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}Теперь в базе данных появится мета-поле phone с нужным значением.
Отображение и редактирование поля в профиле пользователя
Чтобы администратор или сам пользователь мог видеть и редактировать номер телефона в админке, добавим поле в профиль пользователя с помощью хуков show_user_profile и edit_user_profile:
add_action( 'show_user_profile', 'wpgenerate_show_phone_field' );
add_action( 'edit_user_profile', 'wpgenerate_show_phone_field' );
function wpgenerate_show_phone_field( $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" /><br />
<span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php
}Для сохранения изменений добавим обработчик на сохранение профиля:
add_action( 'personal_options_update', 'wpgenerate_save_phone_profile' );
add_action( 'edit_user_profile_update', 'wpgenerate_save_phone_profile' );
function wpgenerate_save_phone_profile( $user_id ) {
if ( current_user_can( 'edit_user', $user_id ) ) {
if ( isset( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
}Использование плагина для расширения регистрации
Если вы хотите упростить добавление полей и настройки регистрации, можно использовать плагин Clearfy Pro. Он предоставляет удобный интерфейс для добавления и управления кастомными полями без написания кода, а также оптимизацию безопасности и производительности сайта.
Также рекомендуется использовать WPRemark для расширенного управления профилями и комментариями.
Вывод дополнительных данных на сайте
Для вывода номера телефона в шаблонах темы можно использовать следующий код, например, в файле author.php или в шаблоне профиля пользователя:
$phone = get_user_meta( get_the_author_meta('ID'), 'phone', true );
if ( $phone ) {
echo '<p>Номер телефона: ' . esc_html( $phone ) . '</p>';
}Таким образом, вы сможете выводить дополнительную информацию на сайте, делая профили пользователей более информативными.