wpupgrade.ru wordpress WP Upgrade

Как добавить поле телефона в форму регистрации WooCommerce с верификацией

Диагностика проблемы: почему стандартной регистрации WooCommerce недостаточно

Стандартная форма регистрации WooCommerce не включает поле для ввода телефона. Для интернет-магазинов это критично, поскольку номер телефона нужен для связи с клиентом, подтверждения заказа и доставки. Без дополнительной валидации телефонных номеров часто приходят некорректные данные, что снижает качество обслуживания.

Пошаговое решение: добавление и валидация поля телефона в WooCommerce

1. Добавляем поле телефона в форму регистрации

Для этого воспользуемся хуком woocommerce_register_form. Вставляем следующий код в файл functions.php вашей темы или в плагин для кастомизации:

add_action('woocommerce_register_form', 'add_phone_field_to_registration_form');
function add_phone_field_to_registration_form() {
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_billing_phone"><?php _e('Телефон', 'woocommerce'); ?> <span class="required">*</span></label>
        <input type="tel" class="input-text" name="billing_phone" id="reg_billing_phone" value="<?php if (!empty($_POST['billing_phone'])) echo esc_attr($_POST['billing_phone']); ?>" />
    </p>
    <?php
}

2. Валидация введённого телефона

Добавим проверку на обязательное заполнение и базовый формат с помощью регулярного выражения. Используем хук woocommerce_register_post:

add_filter('woocommerce_registration_errors', 'validate_phone_field_registration', 10, 3);
function validate_phone_field_registration($errors, $username, $email) {
    if (empty($_POST['billing_phone'])) {
        $errors->add('billing_phone_error', __('Пожалуйста, введите номер телефона.', 'woocommerce'));
    } elseif (!preg_match('/^\+?\d{10,15}$/', $_POST['billing_phone'])) {
        $errors->add('billing_phone_format_error', __('Введите корректный номер телефона, например +71234567890.', 'woocommerce'));
    }
    return $errors;
}

3. Сохраняем номер телефона в метаданные пользователя

После успешной регистрации запишем номер телефона в профиль пользователя и в заказ:

add_action('woocommerce_created_customer', 'save_phone_field_registration');
function save_phone_field_registration($customer_id) {
    if (isset($_POST['billing_phone'])) {
        update_user_meta($customer_id, 'billing_phone', sanitize_text_field($_POST['billing_phone']));
    }
}

Проверка результата после внедрения

  • Откройте страницу регистрации WooCommerce и убедитесь, что поле "Телефон" отображается.
  • Попробуйте зарегистрироваться без номера — должна появиться ошибка.
  • Ввод некорректного номера (например, буквы или короткий номер) должен вызвать ошибку.
  • После успешной регистрации проверьте в админке WordPress в профиле пользователя наличие мета-поля billing_phone с введённым номером.

Частые ошибки и как их исправить

  • Поле не отображается на форме: Проверьте, что код добавлен в активную тему или плагин, и что нет конфликтов с другими хуками.
  • Ошибки валидации не показываются: Убедитесь, что фильтр woocommerce_registration_errors применён корректно и функция возвращает объект $errors.
  • Номер не сохраняется: Проверьте, что функция сохранения подключена к хуку woocommerce_created_customer и что поле billing_phone правильно передаётся через POST.

Практические советы по безопасности и производительности

  • Используйте функцию sanitize_text_field() для очистки входящих данных.
  • Регулярное выражение для проверки номера телефона можно адаптировать под регион, но избегайте чрезмерно сложных проверок на этапе регистрации — лучше валидировать номер отдельно через SMS-сервис.
  • Не храните номер телефона в незашифрованном виде, если используете дополнительные интеграции — рассмотрите возможность шифрования в базе.

Сравнение вариантов решения задачи

МетодОписаниеПлюсыМинусы
Код в functions.phpРучное добавление поля и валидации через хукиПолный контроль, нет лишних плагиновТребует навыков разработки, можно забыть обновить при смене темы
Плагин для регистрацииИспользование плагинов типа "User Registration" или "WooCommerce Custom Fields"Быстрое решение без кодаЛишние зависимости, возможные конфликты и нагрузка
Платные решения с SMS-верификациейГотовые комплексы с подтверждением номера через SMSМаксимальная надёжность и безопасностьСтоимость и сложность интеграции
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее