Не работает доставка WooCommerce

Автор:vkuzyomko

Не работает доставка WooCommerce

Краткий ответ: если не работает доставка WooCommerce, сначала нужно проверить зоны доставки, методы доставки, адрес клиента, страну, область, индекс, вес и габариты товара, условия бесплатной доставки, кеш checkout, плагины доставки, JavaScript-ошибки, wc-ajax, REST API, WAF, PHP-ошибки и логи WooCommerce.

Чаще всего доставка WooCommerce не отображается из-за неправильной зоны доставки, отключённого метода, пустой стоимости, неподходящего адреса, отсутствующего веса товара, конфликта плагинов, кеширования корзины/checkout или ошибки внешнего API службы доставки.

Если доставка связана с Новой Почтой, API, ТТН, отделениями или расчётом стоимости, дополнительно проверьте статью Интеграция WooCommerce с Новой Почтой. Если проблема ломает checkout целиком, полезно также проверить материал WooCommerce не оформляет заказ.

Причина

Доставка в WooCommerce строится вокруг зон доставки. Сначала WooCommerce смотрит адрес клиента, затем ищет подходящую зону, потом показывает методы доставки внутри этой зоны. Если зона не найдена или в ней нет активного метода, покупатель видит ошибку или пустой список доставки.

Симптом Возможная причина Что проверить
Доставка не отображается нет подходящей зоны доставки страна, область, индекс, порядок зон
Пишет “Нет доступных способов доставки” зона найдена, но метод отключён или не подходит Shipping methods, условия, стоимость
Бесплатная доставка не появляется не выполнены условия минимальная сумма, купон, роль, зона
Показывается неправильная доставка зоны стоят в неправильном порядке приоритет зон доставки
Доставка пропала после обновления конфликт плагина, темы или WooCommerce debug.log, WooCommerce logs, плагины
Не грузятся отделения ошибка API службы доставки API-ключ, Network, REST API, логи
Checkout зависает при выборе доставки JS-ошибка, wc-ajax, кеш, WAF Console, Network, admin-ajax.php
Стоимость доставки считается неправильно вес, габариты, класс доставки, налог товар, shipping class, настройки налога

Если доставка пропала после установки или обновления плагина, причина может быть в конфликте. В таком случае проверьте статью После обновления плагина сломался сайт WordPress.

Диагностика

Диагностику доставки нужно начинать не с кода, а с проверки настроек WooCommerce и конкретного тестового заказа. Важно понять: доставка не появляется вообще, появляется неправильно или ломается только для конкретного товара/адреса.

1. Проверьте зоны доставки

Откройте:

WooCommerce → Настройки → Доставка → Зоны доставки

Проверьте:

  • есть ли зона для страны клиента;
  • есть ли зона для нужной области или города;
  • правильно ли указан почтовый индекс;
  • есть ли зона “Остальной мир”, если она нужна;
  • не перекрывает ли широкая зона более точную;
  • правильно ли расположен порядок зон;
  • есть ли внутри зоны активный способ доставки.

Если у вас есть зона “Украина” и отдельная зона “Киев”, более точная зона должна стоять выше. Иначе WooCommerce может выбрать первую подходящую широкую зону и не дойти до более точной.

2. Проверьте методы доставки внутри зоны

В каждой зоне должны быть добавлены и включены методы доставки.

Проверьте:

  • Flat Rate / Фиксированная ставка;
  • Free Shipping / Бесплатная доставка;
  • Local Pickup / Самовывоз;
  • метод доставки от стороннего плагина;
  • активен ли метод;
  • не пустая ли стоимость;
  • нет ли условий, которые не выполняются;
  • не скрывается ли метод другим плагином.

3. Проверьте адрес клиента

WooCommerce рассчитывает доставку по адресу. Если адрес неполный или страна/область/индекс не совпадает с зоной, доставка может не появиться.

Проверьте тестовый заказ с реальными данными:

  • страна;
  • область;
  • город;
  • почтовый индекс;
  • улица;
  • тип доставки;
  • язык сайта, если есть мультиязычность;
  • наличие обязательных полей checkout.

4. Проверьте товар

Некоторые методы доставки зависят от товара. Если у товара нет веса, габаритов или класса доставки, расчёт может не сработать.

Проверьте в карточке товара:

  • товар физический или виртуальный;
  • не включена ли галочка “Виртуальный”;
  • есть ли вес;
  • есть ли габариты;
  • указан ли класс доставки;
  • есть ли ограничения по категории;
  • не исключён ли товар из конкретного метода доставки.

5. Проверьте кеш

Корзину, checkout и динамические запросы доставки нельзя кешировать как обычные страницы. Если кеш отдаёт старые данные, доставка может не пересчитываться.

Исключите из кеша:

  • /cart/;
  • /checkout/;
  • /my-account/;
  • ?wc-ajax=*;
  • страницы оформления заказа;
  • страницы с выбором доставки;
  • динамические API-запросы плагинов доставки.

6. Проверьте Console и Network

Если доставка должна подгружаться через AJAX, но не появляется, откройте DevTools → Console и Network.

Проверьте:

  • есть ли JavaScript-ошибки;
  • есть ли запросы wc-ajax;
  • нет ли 403, 404, 500, 502, 504;
  • что возвращает Response;
  • не блокируется ли admin-ajax.php;
  • не ломается ли REST API;
  • нет ли ошибок плагина доставки.

Если видите ошибку по AJAX, проверьте статью Не работает admin-ajax.php WordPress.

Нужно быстро решить проблему на сайте?

Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.

Оставить заявку

Решение

Исправление зависит от причины. Ниже безопасный порядок, который помогает восстановить доставку без хаотичного отключения всех плагинов.

1. Настройте правильные зоны доставки

Создайте или исправьте зоны доставки так, чтобы каждая зона соответствовала реальному адресу клиента.

  • создайте зону для нужной страны;
  • добавьте регионы, области или индексы;
  • поставьте более точные зоны выше широких;
  • добавьте хотя бы один метод доставки в каждую зону;
  • проверьте зону “Остальной мир”, если продаёте в разные страны;
  • сохраните настройки;
  • очистите кеш.

2. Добавьте активный метод доставки

Если зона есть, но в ней нет активного метода, WooCommerce не сможет показать доставку.

Добавьте один из методов:

  • фиксированная ставка;
  • бесплатная доставка;
  • самовывоз;
  • метод доставки от стороннего плагина;
  • API-доставка, если используется интеграция.

3. Проверьте условия бесплатной доставки

Бесплатная доставка часто не появляется из-за условий.

Проверьте:

  • минимальную сумму заказа;
  • нужен ли купон;
  • учитывается ли сумма до или после скидки;
  • не исключены ли определённые товары;
  • не конфликтует ли бесплатная доставка с платными методами;
  • не скрывает ли другой плагин методы доставки.

4. Исправьте товары без веса и габаритов

Если доставка рассчитывается через API перевозчика, вес и габариты часто обязательны. Без них служба доставки может не вернуть тарифы.

  • укажите вес товара;
  • укажите длину, ширину и высоту;
  • проверьте единицы измерения WooCommerce;
  • проверьте классы доставки;
  • проверьте вариативные товары;
  • проверьте товары в комплекте;
  • проверьте виртуальные товары.

5. Проверьте плагин доставки

Если используется Новая Почта, Укрпошта, DHL, FedEx, UPS, Meest или другой сторонний сервис, проблема может быть в API.

Проверьте:

  • API-ключ;
  • город отправителя;
  • отделение отправителя;
  • тип доставки;
  • валюту;
  • вес и габариты;
  • доступность API;
  • логи плагина;
  • совместимость с версией WooCommerce;
  • ошибки в debug.log.

6. Проверьте конфликт темы и плагинов

Если доставка пропала после обновления, установки нового плагина или смены темы, лучше тестировать на staging-копии.

  • отключите кеш и оптимизацию для checkout;
  • временно переключитесь на стандартную тему;
  • отключите последний установленный плагин;
  • проверьте плагины скрытия методов доставки;
  • проверьте плагины скидок и купонов;
  • проверьте плагины мультиязычности;
  • проверьте плагины checkout editor;
  • проверьте debug.log.

Код

Важно: код ниже предназначен для диагностики. Он может повлиять на доставку, checkout, заказы, сессии, стоимость доставки и работу магазина. Перед изменениями сделайте backup. На рабочем магазине лучше тестировать на staging-копии.

Включить debug.log в wp-config.php

Куда вставлять: файл wp-config.php, выше строки “That’s all, stop editing”.

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

После теста проверьте:

/wp-content/debug.log

Включить debug mode доставки WooCommerce

В админке откройте:

WooCommerce → Настройки → Доставка → Настройки доставки

Включите режим отладки доставки, если он доступен в вашей версии WooCommerce. Он помогает понять, какая зона доставки выбрана для адреса клиента.

Логировать доступные методы доставки

Куда вставлять: functions.php дочерней темы или отдельный мини-плагин. После диагностики удалить.

add_filter('woocommerce_package_rates', function ($rates, $package) {
    if (!function_exists('wc_get_logger')) {
        return $rates;
    }

    $logger = wc_get_logger();

    $rate_ids = array();

    foreach ($rates as $rate_id => $rate) {
        $rate_ids[] = $rate_id . ' | ' . $rate->get_label() . ' | ' . $rate->get_cost();
    }

    $logger->info(
        'Available shipping rates: ' . implode(', ', $rate_ids),
        array('source' => 'sc-shipping-debug')
    );

    return $rates;
}, 20, 2);

После теста проверьте:

WooCommerce → Статус → Журналы → sc-shipping-debug

Проверить, какие товары находятся в пакете доставки

add_filter('woocommerce_package_rates', function ($rates, $package) {
    if (!function_exists('wc_get_logger')) {
        return $rates;
    }

    $items = array();

    foreach ($package['contents'] as $cart_item) {
        if (empty($cart_item['data'])) {
            continue;
        }

        $product = $cart_item['data'];

        $items[] = array(
            'product_id' => $product->get_id(),
            'name'       => $product->get_name(),
            'weight'     => $product->get_weight(),
            'length'     => $product->get_length(),
            'width'      => $product->get_width(),
            'height'     => $product->get_height(),
            'virtual'    => $product->is_virtual() ? 'yes' : 'no',
        );
    }

    wc_get_logger()->info(
        print_r($items, true),
        array('source' => 'sc-shipping-products-debug')
    );

    return $rates;
}, 20, 2);

Очистить shipping transients через WP-CLI

Куда выполнять: SSH в корне сайта.

wp transient delete --all

Важно: команда удаляет все transient-кеши WordPress, а не только доставку. На большом сайте это может временно увеличить нагрузку.

Проверить WooCommerce status через WP-CLI

wp plugin list --status=active
wp theme list --status=active

Результат

После правильного исправления WooCommerce должен показывать подходящие способы доставки на странице корзины и checkout для нужного адреса клиента.

Хороший результат:

  • зона доставки определяется правильно;
  • метод доставки отображается;
  • стоимость доставки считается корректно;
  • бесплатная доставка появляется при выполнении условий;
  • самовывоз не скрывает другие методы без причины;
  • checkout не зависает;
  • отделения службы доставки загружаются;
  • wc-ajax не возвращает ошибки;
  • debug.log не содержит fatal errors;
  • cart и checkout исключены из агрессивного кеша.

Дополнительные способы

Проверить виртуальные товары

Если в корзине только виртуальные товары, доставка может не показываться, потому что WooCommerce считает, что физическая доставка не нужна.

Проверить вариативные товары

У вариаций могут быть отдельные вес, габариты и классы доставки. Если данные заданы только у родительского товара, API-доставка может считать расчёт неправильно.

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

Некоторые плагины скрывают платную доставку при бесплатной, скрывают методы по роли пользователя, стране, сумме, категории или купону. Проверьте их правила.

Проверить налоги

Иногда проблема выглядит как ошибка доставки, хотя на самом деле конфликт связан с налогами, адресом магазина, адресом клиента или настройкой “рассчитывать налог по адресу доставки”.

Проверить мультиязычность

Если доставка не работает только в одной языковой версии сайта, проверьте slug checkout, URL корзины, AJAX, переводы checkout-полей и кеш языковых страниц.

Проверить API службы доставки

Если доставка работает вручную, но не работает через интеграцию, проверьте API-ключ, лимиты, доступность сервиса, формат адреса, город отправителя, отделение, вес, габариты и логи API.

Частые ошибки

Создать зону, но не добавить метод доставки

Зона без метода ничего не покажет клиенту. Внутри зоны должен быть хотя бы один активный способ доставки.

Поставить широкую зону выше точной

Если широкая зона стоит выше, WooCommerce может выбрать её первой и не дойти до нужной точной зоны.

Кешировать checkout

Checkout и cart динамические. Кеш может ломать адрес, сессии, nonce и пересчёт доставки.

Не указывать вес товара

Для API-доставки вес и габариты часто обязательны. Без них служба доставки может не вернуть тариф.

Тестировать только под админом

Доставку нужно проверять как обычный покупатель: инкогнито, реальный адрес, обычная корзина, без прав администратора.

Не смотреть Network

Если доставка подгружается через AJAX, в Network часто видно точную причину: 403, 500, timeout или неправильный response.

Отключать все плагины на рабочем магазине

Это может сломать оплату, доставку, заказы, CRM и уведомления. Лучше делать диагностику на staging-копии.

Диагностика проблем

Проблема: WooCommerce пишет “Нет доступных способов доставки”

Возможная причина: адрес клиента не попадает в зону или в зоне нет активного метода доставки.

Что делать: проверить зоны, порядок зон, адрес клиента, метод доставки и условия метода.

Проблема: бесплатная доставка не появляется

Возможная причина: не выполнена минимальная сумма, не применён купон или метод скрывается другим плагином.

Что делать: проверить условия бесплатной доставки, сумму корзины, купоны и плагины скрытия методов.

Проблема: доставка работает для одного города, но не работает для другого

Возможная причина: разные зоны, индексы, области или ограничение API службы доставки.

Что делать: проверить зону для конкретного адреса, индекс, область и доступность службы доставки.

Проблема: не грузятся отделения Новой Почты

Возможная причина: API-ключ, город, endpoint, REST API, кеш, JS-ошибка или лимиты API.

Что делать: проверить настройки плагина, API-ключ, Console, Network, debug.log и логи доставки.

Проблема: доставка пропала после обновления

Возможная причина: конфликт WooCommerce, темы, плагина доставки, кеша или PHP-версии.

Что делать: проверить debug.log, WooCommerce logs, staging-копию, откат плагина и конфликт темы.

Проблема: стоимость доставки неправильная

Возможная причина: вес, габариты, shipping class, налоги, округление, валюта или правила плагина.

Что делать: проверить товар, вариации, классы доставки, налоговые настройки и правила расчёта.

Проблема: checkout зависает после выбора доставки

Возможная причина: JS-ошибка, wc-ajax, WAF, PHP Fatal error, медленный API или конфликт плагина.

Что делать: открыть Console и Network, проверить wc-ajax, debug.log, WAF и логи плагина доставки.

Проблема: доставка есть в корзине, но пропадает на checkout

Возможная причина: разные шаблоны cart/checkout, кеш, изменение адреса, checkout editor, сессии или JS-конфликт.

Что делать: проверить адрес, checkout поля, кеш, сессии, тему и Network.

Краткие AI-friendly ответы

Почему не работает доставка WooCommerce?

Чаще всего из-за неправильной зоны доставки, отключённого метода, неподходящего адреса, отсутствующего веса товара, кеша checkout, конфликта плагинов, JS-ошибки или проблемы API службы доставки.

Что делать первым?

Проверьте WooCommerce → Настройки → Доставка → Зоны доставки, порядок зон, активные методы, адрес клиента, вес товара, условия бесплатной доставки и кеш checkout.

Почему WooCommerce не показывает способы доставки?

Потому что адрес клиента не попал в нужную зону, в зоне нет активного метода, условия метода не выполнены или доставка скрыта плагином/кодом.

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

Причина может быть в весе, габаритах, классе доставки, налогах, валюте, правилах плагина, API службы доставки или неправильной зоне.

FAQ

Почему WooCommerce пишет “Нет доступных способов доставки”?

Обычно адрес клиента не совпадает с зоной доставки или в найденной зоне нет активного метода доставки. Также могут не выполняться условия метода.

Как проверить, какая зона доставки выбрана?

Включите режим отладки доставки в WooCommerce, если он доступен, и сделайте тест с реальным адресом клиента. Также проверьте порядок зон доставки.

Почему бесплатная доставка не отображается?

Чаще всего не выполнена минимальная сумма, не применён нужный купон, метод отключён или другой плагин скрывает бесплатную доставку.

Почему доставка пропала после обновления WooCommerce?

Возможен конфликт плагина доставки, темы, checkout, кеша, PHP-версии или изменённых hooks. Проверьте debug.log, WooCommerce logs и staging-копию.

Почему доставка работает только для администратора?

Возможна проблема с кешем, ролями, cookies, сессиями, плагином скрытия доставки или разными условиями для авторизованных и гостей.

Нужно ли указывать вес товара?

Для фиксированной доставки не всегда. Для API-доставки, служб перевозки и расчёта тарифа вес и габариты часто обязательны.

Может ли кеш сломать доставку?

Да. Корзина, checkout, wc-ajax и динамические запросы доставки не должны кешироваться как обычные страницы.

Почему не работают отделения службы доставки?

Чаще всего из-за API-ключа, ошибки JavaScript, неправильного города, лимита API, блокировки REST API, кеша или ошибки плагина доставки.

Что делать, если доставка зависит от Новой Почты?

Проверьте API-ключ, город отправителя, отделение, тип доставки, вес, габариты, логи плагина, Console, Network и доступность API.

Когда обращаться к специалисту?

Если доставка ломает checkout, API не возвращает отделения, стоимость считается неправильно, заказы реальные или проблема появилась после обновления, лучше не править магазин наугад.

Вывод

Если не работает доставка WooCommerce, проблема чаще всего находится в зонах доставки, методах, адресе клиента, условиях бесплатной доставки, весе товара, кеше, плагине доставки, JavaScript, AJAX, REST API или внешнем API перевозчика.

Безопасный порядок такой: проверить зоны, порядок зон, методы доставки, адрес, товар, вес, габариты, checkout, кеш, Console, Network, WooCommerce logs и debug.log.

Главное — не удалять настройки и не отключать все плагины на рабочем магазине без проверки. Сначала нужно понять, почему WooCommerce не видит подходящий способ доставки, а потом исправить конкретную причину.

Об авторе

vkuzyomko administrator