В стандартной форме регистрации WordPress отсутствует возможность добавить дополнительные пользовательские поля и реализовать подтверждение email для новых пользователей. В этой статье мы подробно разберём, как добавить новое поле в форму регистрации, например, "Телефон", а также как настроить подтверждение email с помощью собственного кода и плагинов, чтобы повысить качество регистрации и безопасность на вашем сайте.
Почему стоит добавить дополнительное поле и подтверждение email
Добавление дополнительных полей, таких как телефон или имя, позволяет собирать больше информации о пользователях для дальнейшей персонализации и коммуникации. Подтверждение email же защищает сайт от регистрации с фальшивыми адресами, что важно для поддержки качества базы данных и предотвращения спама.
Однако стандартный WordPress не предоставляет возможности ни для добавления полей, ни для подтверждения email из коробки. Для реализации этого нам потребуется добавить код в functions.php или создать мини-плагин, а также использовать сторонние решения.
Как добавить поле "Телефон" в форму регистрации WordPress
Для добавления нового поля нам нужно расширить форму регистрации и сохранить данные в мета-поле пользователя. Рассмотрим пример кода, который добавляет поле "Телефон":
function wpeasy_add_phone_field() {
?>
<p>
<label for="phone">Телефон<br />
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( wp_unslash( $_POST['phone'] ?? '' ) ); ?>" size="25" /></label>
</p>
<?php
}
add_action('register_form', 'wpeasy_add_phone_field');
function wpeasy_validate_phone_field($errors, $sanitized_user_login, $user_email) {
if ( empty( $_POST['phone'] ) || ! preg_match('/^\+?[0-9]{7,15}$/', $_POST['phone']) ) {
$errors->add('phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный телефон.');
}
return $errors;
}
add_filter('registration_errors', 'wpeasy_validate_phone_field', 10, 3);
function wpeasy_save_phone_field($user_id) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta($user_id, 'phone', sanitize_text_field($_POST['phone']));
}
}
add_action('user_register', 'wpeasy_save_phone_field');Этот код добавляет поле "Телефон" на страницу регистрации, проверяет его на корректность с помощью регулярного выражения, и сохраняет его в метаданных пользователя.
Разбор кода
wpeasy_add_phone_field— выводит дополнительное поле в HTML форме.wpeasy_validate_phone_field— валидирует введённое значение, проверяя на формат телефона.wpeasy_save_phone_field— сохраняет введённый номер телефона в пользовательские метаданные.
Как реализовать подтверждение email после регистрации
Подтверждение email — это процесс, когда на указанный пользователем адрес отправляется письмо с ссылкой для активации аккаунта. Пока пользователь не активирует аккаунт, он не сможет войти на сайт.
Реализовать подтверждение email можно с помощью плагинов, например, Email Verification for WooCommerce или Expert Review, если вам нужны расширенные возможности отзывов и пользовательских действий, хотя для чистого подтверждения email лучше использовать специализированные плагины, например, WP Email Verification.
Если же хотите сделать самостоятельно, то можно использовать следующий подход:
- После регистрации генерируем уникальный код подтверждения и сохраняем его в метаданных пользователя.
- Отправляем письмо с ссылкой, содержащей этот код.
- При переходе по ссылке проверяем код и активируем пользователя.
Пример кода для подтверждения email
function wpeasy_register_user_and_send_confirmation( $user_id ) {
$user = get_userdata( $user_id );
$activation_code = wp_generate_password( 20, false );
update_user_meta( $user_id, 'activation_code', $activation_code );
update_user_meta( $user_id, 'is_activated', 0 );
$activation_link = add_query_arg( array(
'key' => $activation_code,
'user' => $user_id
), site_url('/activate-account/') );
$message = "Здравствуйте, " . $user->user_login . ",\n\n" .
"Для активации вашего аккаунта перейдите по ссылке:\n" . $activation_link;
wp_mail( $user->user_email, 'Активация аккаунта', $message );
}
add_action( 'user_register', 'wpeasy_register_user_and_send_confirmation' );
function wpeasy_handle_account_activation() {
if ( isset($_GET['key'], $_GET['user']) ) {
$user_id = intval($_GET['user']);
$activation_code = sanitize_text_field($_GET['key']);
$saved_code = get_user_meta( $user_id, 'activation_code', true );
if ( $activation_code === $saved_code ) {
update_user_meta( $user_id, 'is_activated', 1 );
delete_user_meta( $user_id, 'activation_code' );
echo 'Ваш аккаунт успешно активирован!';
} else {
echo 'Неверный код активации.';
}
exit;
}
}
add_action( 'init', 'wpeasy_handle_account_activation' );
function wpeasy_prevent_login_if_not_activated( $user, $username, $password ) {
if ( is_a( $user, 'WP_User' ) ) {
$is_activated = get_user_meta( $user->ID, 'is_activated', true );
if ( $is_activated != 1 ) {
return new WP_Error( 'activation_required', '<strong>Ошибка:</strong> Ваш аккаунт не активирован. Проверьте почту.' );
}
}
return $user;
}
add_filter( 'authenticate', 'wpeasy_prevent_login_if_not_activated', 30, 3 );Этот код создаёт простой механизм подтверждения email. После регистрации пользователь получает письмо с ссылкой активации. Пока он не активировал аккаунт, вход будет невозможен.
Рекомендации по улучшению процесса регистрации
Использование плагинов для расширения функционала
Если собственная реализация кажется сложной, рекомендуем обратить внимание на плагины, которые упрощают эти задачи и имеют поддержку. Например, Clearfy Pro может помочь оптимизировать и обезопасить регистрацию, а WPRemark добавит удобные возможности для взаимодействия с пользователями.
Визуальное оформление формы регистрации
Дополнительные поля должны быть хорошо стилизованы и понятно располагаться на форме. Для этого можно использовать хуки WordPress вместе с CSS из вашей темы. Например, подключите стили через functions.php или используйте темы с поддержкой кастомизации форм, такие как Reboot.
Безопасность и валидация данных
Очень важно правильно валидировать и санитизировать все пользовательские данные, чтобы избежать уязвимостей. Используйте встроенные функции WordPress, такие как sanitize_text_field() и регулярные выражения для проверки формата, а также проверяйте nonce и права доступа при обработке POST-запросов.
Заключение
Добавление пользовательских полей в форму регистрации и реализация подтверждения email — это эффективные способы повысить качество пользователей и безопасность сайта на WordPress. Используя приведённые примеры кода и рекомендации, вы сможете создать надёжный процесс регистрации, адаптированный под ваши задачи. При необходимости стоит рассмотреть и специализированные плагины из каталога WPSHOP, чтобы сэкономить время и получить поддержку.