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