Почему WooCommerce делает поле телефона обязательным?
По умолчанию WooCommerce включает поле "Телефон" в разделе "Адрес оплаты" как обязательное. Это связано с типичными требованиями служб доставки и платежных систем, которые требуют контактный номер. Однако в некоторых случаях, например, при цифровых товарах или локальных самовывозах, телефон может быть не нужен или нежелателен.
Диагностика проблемы: как понять, что поле телефона обязательное и где его отключить
Стандартный способ увидеть обязательность — перейти в Checkout и проверить форму. Если поле телефона отмечено звездочкой и при попытке оформить заказ без телефона появляется ошибка, значит, оно обязательное.
При этом WooCommerce не предоставляет в админке опцию для изменения обязательности этого поля — придется править через код.
Проверка через консоль разработчика
Откройте страницу оформления заказа, используйте инспектор браузера и найдите input с name="billing_phone". Проверьте наличие атрибута required. Если есть — поле обязательное клиентом.
Пошаговое решение: как убрать обязательность поля телефона в WooCommerce
Самый безопасный способ — использовать фильтр woocommerce_billing_fields для изменения свойства required поля billing_phone.
add_filter('woocommerce_billing_fields', 'wpdo_remove_phone_required_field', 20, 1);
function wpdo_remove_phone_required_field($fields) {
if (isset($fields['billing_phone'])) {
$fields['billing_phone']['required'] = false;
}
return $fields;
}
Добавьте этот код в файл functions.php вашей темы ребенка или в собственный плагин.
Особенности и дополнительная проверка
- Если у вас кастомные плагины оформления заказа, убедитесь, что они не переопределяют обязательность поля.
- Проверьте, что поле остается доступным для ввода, но без ошибки при пустом значении.
- Обратите внимание: некоторые платежные шлюзы требуют телефон, и могут блокировать оплату без него.
Проверка результата после внедрения
Для проверки:
- Очистите кэш сайта и браузера.
- Перейдите на страницу оформления заказа в режиме инкогнито.
- Попробуйте оформить заказ без ввода телефона.
- Если заказ проходит без ошибок — задача выполнена.
- Если ошибка сохраняется, проверьте, нет ли конфликтов с другими плагинами или темой.
Частые ошибки и как их исправить
Ошибка 1: Поле по-прежнему обязательное после внесения кода
- Причина: код добавлен в неправильный файл или приоритет фильтра слишком низкий.
- Решение: убедитесь, что код находится в
functions.phpактивной дочерней темы, и попробуйте повысить приоритет фильтра, например, до 50.
Ошибка 2: Платежный шлюз требует телефон
- Причина: некоторые шлюзы (например, PayPal) проверяют наличие телефона в данных заказа.
- Решение: либо оставьте поле обязательным, либо настройте шлюз в его настройках, если такая опция есть.
Ошибка 3: Кастомные формы оформления заказа игнорируют изменения
- Причина: кастомные решения могут жестко задавать обязательность полей.
- Решение: обратитесь к разработчику кастомного плагина или темы для внесения правок.
Практические советы по безопасности и производительности
- Отключая обязательность номера телефона, убедитесь, что это не снижает качество обслуживания клиентов и не мешает работе служб доставки.
- Если вы отключаете телефон для цифровых товаров, дополнительно проверьте, что другие контактные данные (email) валидны и обязательны.
- Не используйте плагины с избыточным функционалом для изменения одного поля — предпочтительнее легкий код.
Сравнение вариантов отключения обязательности поля телефона
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
Код через woocommerce_billing_fields | Изменение свойства required у поля | Легко, быстро, не требует плагинов | Можно пропустить при кастомных решениях |
| Плагин для кастомизации Checkout | Плагины типа Checkout Field Editor | Управление через интерфейс, больше возможностей | Дополнительная нагрузка, возможные конфликты |
| Кастомные шаблоны оформления | Полное изменение формы оформления заказа | Максимальный контроль | Сложно, требует поддержки при обновлениях |
Дополнительный пример: отключение обязательности телефона только для цифровых товаров
Если нужно убрать обязательность телефона только когда в корзине только цифровые товары, используйте условие:
add_filter('woocommerce_billing_fields', 'wpdo_conditional_phone_required', 20, 1);
function wpdo_conditional_phone_required($fields) {
$only_virtual = true;
foreach (WC()->cart->get_cart() as $cart_item) {
if (!$cart_item['data']->is_virtual()) {
$only_virtual = false;
break;
}
}
if ($only_virtual && isset($fields['billing_phone'])) {
$fields['billing_phone']['required'] = false;
}
return $fields;
}