Почему нужно отключать обязательное поле адреса доставки в WooCommerce
В некоторых интернет-магазинах, особенно при продаже цифровых товаров или самовывозе, адрес доставки не нужен. По умолчанию WooCommerce делает поле адреса доставки обязательным, что может отпугнуть покупателей и усложнить оформление заказа. В статье рассмотрим, как убрать обязательность этого поля с помощью кода, без плагинов.
Диагностика проблемы: как понять, что адрес доставки обязателен
При оформлении заказа в WooCommerce обратите внимание на форму адреса доставки. Если поля, такие как "Адрес", "Город", "Почтовый индекс" отмечены как обязательные (звездочка *), то WooCommerce требует их заполнения. Это стандартное поведение, даже если в настройках магазина указан тип товаров, не требующих доставки.
Чтобы проверить, какие поля обязательны, можно:
- Перейти в
wp-content/plugins/woocommerce/includes/class-wc-checkout.phpи найти методget_checkout_fields(), который возвращает все поля с параметром'required' => true; - Использовать отладчик или вывести
print_r(WC()->checkout()->get_checkout_fields('shipping'))в шаблоне, чтобы увидеть текущие поля доставки и их параметры; - Проверить настройки WooCommerce в разделе "Настройки - Доставка" — иногда там можно отключить доставку, что уберет адрес.
Пошаговое решение: отключение обязательного адреса доставки через functions.php
Чтобы убрать обязательность всех полей адреса доставки или отдельных из них, добавьте следующий код в файл functions.php вашей темы (желательно дочерней) или в плагин для кастомного кода:
add_filter('woocommerce_shipping_fields', 'wpdo_make_shipping_fields_optional', 10, 1);
function wpdo_make_shipping_fields_optional($fields) {
foreach ($fields as $key => $field) {
$fields[$key]['required'] = false; // делаем поле необязательным
}
return $fields;
}Если нужно отключить обязательность только конкретных полей, например, адреса и города, используйте этот вариант:
add_filter('woocommerce_shipping_fields', 'wpdo_make_selected_shipping_fields_optional', 10, 1);
function wpdo_make_selected_shipping_fields_optional($fields) {
$fields_to_optional = [
'shipping_address_1',
'shipping_city',
'shipping_postcode'
];
foreach ($fields_to_optional as $field_key) {
if (isset($fields[$field_key])) {
$fields[$field_key]['required'] = false;
}
}
return $fields;
}Как убрать вообще все поля доставки при продаже цифровых товаров
Если магазин продает только виртуальные или загружаемые товары, можно полностью отключить форму доставки:
add_filter('woocommerce_cart_needs_shipping_address', '__return_false');Проверка результата после внедрения кода
Чтобы проверить, что обязательность убрана:
- Откройте страницу оформления заказа;
- Перейдите к разделу адреса доставки;
- Попробуйте отправить форму, не заполняя поля адреса доставки;
- Если форма успешно отправляется без ошибок валидации для этих полей, значит, код сработал.
Дополнительно можно просмотреть объект WC()->checkout()->get_checkout_fields('shipping') через дебаггер или var_dump, чтобы убедиться, что параметр required равен false.
Частые ошибки при отключении обязательности полей доставки
- Кэширование страницы оформления заказа — иногда старые версии страниц кэшируются, поэтому изменения не видны. Очистите кэш браузера и кэш плагинов кэширования.
- Код добавлен не в ту тему — если используется дочерняя тема, убедитесь, что код добавлен именно в
functions.phpактивной темы. - Конфликты с другими плагинами — некоторые плагины могут переопределять поля и их правила валидации. Отключите плагины, связанные с оформлением заказа, чтобы проверить конфликт.
- Неправильные ключи полей в массиве — убедитесь, что ключи полей совпадают с теми, что возвращает
woocommerce_shipping_fields.
Практические советы по оптимизации и безопасности
- Если отключаете адрес доставки для виртуальных товаров, дополнительно используйте
add_filter('woocommerce_cart_needs_shipping', '__return_false');— это уменьшит нагрузку и ускорит оформление. - Для безопасности убедитесь, что другие плагины и кастомный код не добавляют обязательность на уровне JavaScript, иначе пользователь увидит ошибки клиентской проверки.
- После внесения изменений протестируйте оформление на нескольких устройствах и браузерах, чтобы убедиться в кроссбраузерности и корректности работы.
- Если в проекте используется Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpdo.ru&utm_medium=article&utm_campaign=woocommerce-udalit-obyazatelnoe-pole-adresa-dostavki), проверьте настройки оптимизации форм — иногда они могут влиять на валидацию полей.
Сравнение методов отключения обязательности полей доставки
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
Фильтр woocommerce_shipping_fields | Изменение поля "required" на false | Точный контроль, не требует плагинов | Нужно обновлять при изменениях WooCommerce |
Полное отключение адреса доставкиwoocommerce_cart_needs_shipping_address | Убирает форму доставки полностью | Упрощает оформление для цифровых товаров | Неподходит, если нужна доставка для части товаров |
| Плагины для кастомизации оформления | Использование GUI для настройки полей | Удобно, без кода | Могут быть лишние зависимости и нагрузка |