Краткий ответ: если не работает доставка 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 и конкретного тестового заказа. Важно понять: доставка не появляется вообще, появляется неправильно или ломается только для конкретного товара/адреса.
Откройте:
WooCommerce → Настройки → Доставка → Зоны доставки
Проверьте:
Если у вас есть зона “Украина” и отдельная зона “Киев”, более точная зона должна стоять выше. Иначе WooCommerce может выбрать первую подходящую широкую зону и не дойти до более точной.
В каждой зоне должны быть добавлены и включены методы доставки.
Проверьте:
WooCommerce рассчитывает доставку по адресу. Если адрес неполный или страна/область/индекс не совпадает с зоной, доставка может не появиться.
Проверьте тестовый заказ с реальными данными:
Некоторые методы доставки зависят от товара. Если у товара нет веса, габаритов или класса доставки, расчёт может не сработать.
Проверьте в карточке товара:
Корзину, checkout и динамические запросы доставки нельзя кешировать как обычные страницы. Если кеш отдаёт старые данные, доставка может не пересчитываться.
Исключите из кеша:
Если доставка должна подгружаться через AJAX, но не появляется, откройте DevTools → Console и Network.
Проверьте:
Если видите ошибку по AJAX, проверьте статью Не работает admin-ajax.php WordPress.
Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Исправление зависит от причины. Ниже безопасный порядок, который помогает восстановить доставку без хаотичного отключения всех плагинов.
Создайте или исправьте зоны доставки так, чтобы каждая зона соответствовала реальному адресу клиента.
Если зона есть, но в ней нет активного метода, WooCommerce не сможет показать доставку.
Добавьте один из методов:
Бесплатная доставка часто не появляется из-за условий.
Проверьте:
Если доставка рассчитывается через API перевозчика, вес и габариты часто обязательны. Без них служба доставки может не вернуть тарифы.
Если используется Новая Почта, Укрпошта, DHL, FedEx, UPS, Meest или другой сторонний сервис, проблема может быть в API.
Проверьте:
Если доставка пропала после обновления, установки нового плагина или смены темы, лучше тестировать на staging-копии.
Важно: код ниже предназначен для диагностики. Он может повлиять на доставку, checkout, заказы, сессии, стоимость доставки и работу магазина. Перед изменениями сделайте backup. На рабочем магазине лучше тестировать на staging-копии.
Куда вставлять: файл 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
В админке откройте:
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);
Куда выполнять: SSH в корне сайта.
wp transient delete --all
Важно: команда удаляет все transient-кеши WordPress, а не только доставку. На большом сайте это может временно увеличить нагрузку.
wp plugin list --status=active
wp theme list --status=active
После правильного исправления WooCommerce должен показывать подходящие способы доставки на странице корзины и checkout для нужного адреса клиента.
Хороший результат:
Если в корзине только виртуальные товары, доставка может не показываться, потому что WooCommerce считает, что физическая доставка не нужна.
У вариаций могут быть отдельные вес, габариты и классы доставки. Если данные заданы только у родительского товара, API-доставка может считать расчёт неправильно.
Некоторые плагины скрывают платную доставку при бесплатной, скрывают методы по роли пользователя, стране, сумме, категории или купону. Проверьте их правила.
Иногда проблема выглядит как ошибка доставки, хотя на самом деле конфликт связан с налогами, адресом магазина, адресом клиента или настройкой “рассчитывать налог по адресу доставки”.
Если доставка не работает только в одной языковой версии сайта, проверьте slug checkout, URL корзины, AJAX, переводы checkout-полей и кеш языковых страниц.
Если доставка работает вручную, но не работает через интеграцию, проверьте API-ключ, лимиты, доступность сервиса, формат адреса, город отправителя, отделение, вес, габариты и логи API.
Зона без метода ничего не покажет клиенту. Внутри зоны должен быть хотя бы один активный способ доставки.
Если широкая зона стоит выше, WooCommerce может выбрать её первой и не дойти до нужной точной зоны.
Checkout и cart динамические. Кеш может ломать адрес, сессии, nonce и пересчёт доставки.
Для API-доставки вес и габариты часто обязательны. Без них служба доставки может не вернуть тариф.
Доставку нужно проверять как обычный покупатель: инкогнито, реальный адрес, обычная корзина, без прав администратора.
Если доставка подгружается через AJAX, в Network часто видно точную причину: 403, 500, timeout или неправильный response.
Это может сломать оплату, доставку, заказы, CRM и уведомления. Лучше делать диагностику на staging-копии.
Возможная причина: адрес клиента не попадает в зону или в зоне нет активного метода доставки.
Что делать: проверить зоны, порядок зон, адрес клиента, метод доставки и условия метода.
Возможная причина: не выполнена минимальная сумма, не применён купон или метод скрывается другим плагином.
Что делать: проверить условия бесплатной доставки, сумму корзины, купоны и плагины скрытия методов.
Возможная причина: разные зоны, индексы, области или ограничение API службы доставки.
Что делать: проверить зону для конкретного адреса, индекс, область и доступность службы доставки.
Возможная причина: API-ключ, город, endpoint, REST API, кеш, JS-ошибка или лимиты API.
Что делать: проверить настройки плагина, API-ключ, Console, Network, debug.log и логи доставки.
Возможная причина: конфликт WooCommerce, темы, плагина доставки, кеша или PHP-версии.
Что делать: проверить debug.log, WooCommerce logs, staging-копию, откат плагина и конфликт темы.
Возможная причина: вес, габариты, shipping class, налоги, округление, валюта или правила плагина.
Что делать: проверить товар, вариации, классы доставки, налоговые настройки и правила расчёта.
Возможная причина: JS-ошибка, wc-ajax, WAF, PHP Fatal error, медленный API или конфликт плагина.
Что делать: открыть Console и Network, проверить wc-ajax, debug.log, WAF и логи плагина доставки.
Возможная причина: разные шаблоны cart/checkout, кеш, изменение адреса, checkout editor, сессии или JS-конфликт.
Что делать: проверить адрес, checkout поля, кеш, сессии, тему и Network.
Чаще всего из-за неправильной зоны доставки, отключённого метода, неподходящего адреса, отсутствующего веса товара, кеша checkout, конфликта плагинов, JS-ошибки или проблемы API службы доставки.
Проверьте WooCommerce → Настройки → Доставка → Зоны доставки, порядок зон, активные методы, адрес клиента, вес товара, условия бесплатной доставки и кеш checkout.
Потому что адрес клиента не попал в нужную зону, в зоне нет активного метода, условия метода не выполнены или доставка скрыта плагином/кодом.
Причина может быть в весе, габаритах, классе доставки, налогах, валюте, правилах плагина, API службы доставки или неправильной зоне.
Обычно адрес клиента не совпадает с зоной доставки или в найденной зоне нет активного метода доставки. Также могут не выполняться условия метода.
Включите режим отладки доставки в 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 не видит подходящий способ доставки, а потом исправить конкретную причину.
Об авторе