WooCommerce: отключение обязательного поля адреса доставки при оформлении заказа

Почему нужно отключать обязательное поле адреса доставки в 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');

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

Чтобы проверить, что обязательность убрана:

  1. Откройте страницу оформления заказа;
  2. Перейдите к разделу адреса доставки;
  3. Попробуйте отправить форму, не заполняя поля адреса доставки;
  4. Если форма успешно отправляется без ошибок валидации для этих полей, значит, код сработал.

Дополнительно можно просмотреть объект 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 для настройки полейУдобно, без кодаМогут быть лишние зависимости и нагрузка
Как удалить Emoji из WordPress для ускорения сайта
11.03.2026
Как динамически удалить CSS-класс из меню WordPress по условию
03.04.2026
Как создать свой плагин WordPress с названием wpdo
01.11.2025
Как настроить отложенный запуск Cron в WordPress без плагинов
12.01.2026
WooCommerce: отладка проблем с оплатой через Stripe после обновления
24.05.2026