Стандартная форма регистрации WordPress часто не удовлетворяет потребности проектов с уникальными требованиями к сбору данных пользователей. В этой статье мы подробно рассмотрим, как кастомизировать форму регистрации WordPress с помощью хуков и кода, добавлять новые поля, валидировать их и сохранять данные в пользовательские метаполя.
Почему стоит кастомизировать форму регистрации WordPress
По умолчанию WordPress предлагает минимальный набор полей: имя пользователя, email и пароль. Однако в большинстве проектов требуется собрать дополнительные данные, например, телефон, дату рождения, согласие с правилами или другую информацию.
Кастомизация формы регистрации позволит:
- Собрать нужные данные для последующей работы с пользователями.
- Повысить качество и полноту профилей пользователей.
- Обеспечить валидацию и безопасность введенной информации.
- Настроить удобный интерфейс регистрации под дизайн сайта.
Добавление новых полей в форму регистрации WordPress (action register_form)
Для добавления новых полей в форму регистрации мы используем хук register_form. Пример добавления поля "Телефон":
function wplesson_add_phone_field() {
$phone = ( isset( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
echo '<p>'
. '<label for="phone">Телефон</label><br/>'
. '<input type="text" name="phone" id="phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />'
. '</p>';
}
add_action('register_form', 'wplesson_add_phone_field');
Этот код вставит поле "Телефон" в стандартную форму регистрации.
Валидация новых полей (filter registration_errors)
Чтобы новые поля корректно обрабатывались и валидировались, необходимо использовать фильтр registration_errors. Например, проверим, что поле "Телефон" не пустое и соответствует формату:
function wplesson_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['phone'] ) ) {
$errors->add( 'phone_error', '<strong>Ошибка</strong>: Пожалуйста, укажите телефон.' );
} else {
$phone = sanitize_text_field( $_POST['phone'] );
if ( ! preg_match( '/^\+?[0-9\s\-\(\)]+$/', $phone ) ) {
$errors->add( 'phone_format_error', '<strong>Ошибка</strong>: Неверный формат телефона.' );
}
}
return $errors;
}
add_filter( 'registration_errors', 'wplesson_validate_phone_field', 10, 3 );
Таким образом мы можем предотвратить регистрацию с некорректными данными.
Сохранение данных новых полей (action user_register)
После успешной регистрации нужно сохранить дополнительные поля в метаданные пользователя. Для этого используем хук user_register:
function wplesson_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wplesson_save_phone_field' );
Теперь данные телефона будут храниться в профиле пользователя и доступны для вывода и использования в дальнейшем.
Вывод дополнительных полей в профиле пользователя (action show_user_profile и edit_user_profile)
Чтобы администраторы могли видеть и редактировать новые поля, добавим их в профиль пользователя:
function wplesson_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" />
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wplesson_show_phone_field' );
add_action( 'edit_user_profile', 'wplesson_show_phone_field' );
И сохраним изменения:
function wplesson_save_profile_phone_field( $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'] ) );
}
}
}
add_action( 'personal_options_update', 'wplesson_save_profile_phone_field' );
add_action( 'edit_user_profile_update', 'wplesson_save_profile_phone_field' );
Использование плагина Clearfy для расширенной кастомизации формы регистрации
Если нужна более продвинутая кастомизация без ручного кода, рекомендуем обратить внимание на плагин Clearfy. Он позволяет:
- Добавлять и настраивать произвольные поля регистрации и профиля.
- Включать валидацию и маски ввода.
- Оптимизировать и ускорять работу сайта.
Плагин значительно упрощает расширение функционала регистрации, особенно для сайтов без разработчиков.
Заключение
Кастомизация формы регистрации — важный этап доработки сайта на WordPress. Используя хуки register_form, registration_errors и user_register, вы можете расширить стандартный функционал без изменения ядра. Для упрощения задачи подойдет плагин Clearfy, который добавит удобный интерфейс настройки.
Такой подход позволит собрать необходимые данные, повысить качество пользовательских профилей и улучшить взаимодействие с аудиторией сайта.