Если WooCommerce не рассчитывает доставку, проблема чаще всего не в самой формуле стоимости. Сначала нужно проверить, попадает ли адрес покупателя в нужную зону доставки и есть ли в этой зоне активный способ доставки.
WooCommerce показывает покупателю только методы из той зоны, которой соответствует его адрес. При этом покупатель может попасть только в одну зону — первую подходящую по порядку. Поэтому неправильно настроенные или расположенные зоны легко приводят к ситуации, когда доставка исчезает полностью или показывается не та стоимость.
Что проверить в первую очередь
↑ К оглавлениюЕсли нужно быстро локализовать проблему, не меняйте сразу плагины и код. Проверьте четыре вещи:
- В WooCommerce → Настройки → Основные доставка разрешена для страны покупателя.
- В WooCommerce → Настройки → Доставка → Зоны доставки адрес покупателя попадает в нужную зону.
- В этой зоне есть хотя бы один включённый способ доставки.
- Товар не отмечен как Virtual.
Если эти четыре пункта в порядке, уже имеет смысл проверять postcode, кэш, плагины доставки, checkout и кастомный код.
Как WooCommerce выбирает способ доставки
↑ К оглавлениюВ WooCommerce доставка строится вокруг shipping zones — зон доставки.
Например:
- Москва;
- Московская область;
- Россия;
- остальные страны.
В каждой зоне задаются свои способы доставки и стоимость.
Когда покупатель вводит адрес, WooCommerce ищет подходящую зону и показывает методы, которые добавлены именно в неё. Один покупатель соответствует только одной зоне. WooCommerce использует первую подходящую зону сверху списка.
Поэтому наличие способа «Курьер — 500 ₽» ещё не означает, что покупатель его увидит. Сначала его адрес должен попасть именно в ту зону, где этот способ находится.
Проверьте, разрешена ли доставка в страну покупателя
↑ К оглавлениюОткройте:
WooCommerce → Настройки → Основные
Проверьте параметр Shipping location(s) / Регионы доставки.
WooCommerce позволяет:
- доставлять во все страны, где разрешены продажи;
- ограничить список стран;
- полностью отключить доставку.
Если нужной страны здесь нет, дальнейшая настройка зон не поможет.
Здесь же проверьте Default customer location. WooCommerce может считать местоположение покупателя по адресу магазина, не задавать местоположение до ввода адреса либо использовать геолокацию. При варианте «без местоположения по умолчанию» доставка может не рассчитываться, пока покупатель не заполнит адрес.
Это важно отличать от ошибки: если стоимость появляется после ввода страны, региона и индекса, расчёт доставки работает.
Проверьте зоны доставки
↑ К оглавлениюОткройте:
WooCommerce → Настройки → Доставка → Зоны доставки
Найдите зону, куда должен попасть покупатель.
Например, если доставка нужна по России, проверьте:
- есть ли Россия в регионах зоны;
- не ограничена ли зона конкретными областями;
- нет ли ограничения по почтовым индексам;
- добавлен ли в эту зону способ доставки.
Если адрес не соответствует ни одной пользовательской зоне, WooCommerce использует Rest of the world / Остальной мир. Если и там нет способов доставки, покупатель получит сообщение о том, что доставка для его адреса недоступна.
Пример
Допустим, настроены:
- Москва — курьер 500 ₽;
- Россия — доставка 900 ₽.
Покупатель из Москвы должен попасть в первую зону.
Если зона «Россия» расположена выше и тоже подходит его адресу, WooCommerce может выбрать её раньше.
Именно поэтому проверять нужно не только содержимое зон, но и их порядок.
Где WooCommerce хранит зоны доставки
↑ К оглавлениюСозданные зоны доставки WooCommerce сохраняет в базе данных сайта.
Для них используются таблицы:
<prefix>woocommerce_shipping_zones<prefix>woocommerce_shipping_zone_locations<prefix>woocommerce_shipping_zone_methods
где <prefix> — фактический префикс таблиц WordPress на конкретном сайте.
Но вручную загружать в эти таблицы стандартный справочник регионов обычно не требуется: зоны создают через WooCommerce → Настройки → Доставка → Зоны доставки, после чего WooCommerce сам сохраняет конфигурацию.
Если магазин использует собственный справочник городов, районов или населённых пунктов, это уже может быть функциональностью отдельного shipping plugin. При переносе или восстановлении сайта тогда нужно проверять не только стандартные зоны WooCommerce, но и таблицы/настройки самого плагина.
Этот блок не должен содержать инструкций по ручному редактированию базы.
Проверьте порядок зон
↑ К оглавлениюОдна из самых неприятных ошибок — зона настроена правильно, но WooCommerce до неё вообще не доходит.
Зоны нужно располагать от наиболее конкретной к наиболее широкой. Например:
- город;
- область;
- страна.
WooCommerce останавливается на первой зоне, соответствующей адресу покупателя.
Поэтому:
Россия
Москва
может быть неправильным порядком.
Логичнее:
Москва
Россия
То же относится к зонам по postcode.
Проверьте способы доставки внутри зоны
↑ К оглавлениюОткройте нужную зону и убедитесь, что внутри неё действительно есть активный способ доставки.
В стандартном WooCommerce доступны:
- Flat Rate;
- Free Shipping;
- Local Pickup.
Если зона существует, но способов внутри неё нет, WooCommerce нечего показывать покупателю.
Откройте каждый используемый метод и отдельно проверьте его условия.
Особенно это относится к бесплатной доставке: она может требовать минимальную сумму заказа, купон или выполнение другого заданного условия. Если условие не выполнено, метод не появится.
Проверьте адрес и почтовый индекс
↑ К оглавлениюДля диагностики используйте тот же адрес, на котором доставка не работает у клиента.
Введите полностью:
- страну;
- регион;
- город;
- индекс.
Это важно, потому что зона может быть ограничена конкретными postcode.
WooCommerce поддерживает точные индексы, диапазоны и wildcard-правила. Ошибка в диапазоне или слишком узкая маска может исключить реального покупателя из зоны.
Например, правило:
101*
и точный:
101000
— не одно и то же с точки зрения охвата зоны.
При проблемах с доставкой также нужно проверять пересекающиеся и неполные диапазоны индексов.
Проверьте товар: не включён ли Virtual
↑ К оглавлениюОткройте проблемный товар.
Если он отмечен как Virtual / Виртуальный, WooCommerce считает, что физическая доставка ему не нужна.
Такой товар:
- не запускает расчёт доставки;
- не требует shipping-полей;
- не вызывает shipping calculator сам по себе.
У вариативного товара настройку нужно проверить также у конкретной вариации.
Это особенно легко пропустить после импорта товаров или массового редактирования.
Если в корзине находятся только виртуальные товары, отсутствие доставки — нормальное поведение WooCommerce, а не ошибка.
Вес и размеры товара: когда они действительно важны
↑ К оглавлениюЗдесь часто начинают искать проблему не там.
Для стандартных методов WooCommerce — Flat Rate, Free Shipping и Local Pickup — сам по себе вес или размер товара не определяет, появится ли доставка.
Но вес и размеры могут быть критически важны, если стоимость рассчитывает сторонний плагин перевозчика.
Например, внешнему API могут потребоваться:
- вес;
- длина;
- ширина;
- высота;
- shipping class;
- адрес отправления.
Поэтому правило простое:
Flat Rate не работает → сначала смотрим зоны.
Расчёт перевозчика по API не работает → дополнительно проверяем вес, размеры и требования конкретного плагина.
Включите Shipping Debug Mode
↑ К оглавлениюЭто один из самых полезных инструментов диагностики WooCommerce.
Откройте:
WooCommerce → Настройки → Доставка → Настройки доставки
и включите Debug mode.
После этого обновите корзину или checkout.
WooCommerce покажет диагностическую информацию, в том числе поможет понять, какая shipping zone фактически выбрана для введённого адреса.
Это намного полезнее, чем менять настройки наугад.
Например, вы рассчитываете, что клиент попадает в «Москва», а debug показывает «Россия». Значит проблема уже локализована: нужно проверять порядок или условия зон.
После диагностики debug mode нужно отключить: сообщения выводятся на фронтенде и могут быть видны покупателям.
Проверьте кэш корзины и checkout
↑ К оглавлениюТипичный симптом:
- адрес изменили;
- настройки доставки изменили;
- стоимость должна стать другой;
- покупатель продолжает видеть старое значение.
При таких проблемах очистите:
- кэш браузера;
- кэш WordPress;
- серверный кэш;
- CDN-кэш.
И особенно важно не кэшировать динамические страницы:
- Cart;
- Checkout;
- My Account.
Если checkout отдаётся посетителю как закэшированный HTML, новые rates могут просто не отображаться корректно.
После очистки проверяйте проблему в новой приватной сессии браузера и с реальным тестовым адресом.
Проверьте тему, checkout и плагины
↑ К оглавлениюЕсли зоны настроены правильно, debug определяет нужную зону, но доставка всё равно не отображается — следующий этап: исключить конфликт.
Для проверки временно используйте стандартные Cart и Checkout — core blocks или shortcodes — вместо checkout, собранного сторонним конструктором или модулем.
Также проверьте:
WooCommerce → Статус → Логи
Там могут быть PHP fatal errors и другие ошибки, связанные с расчётом заказа.
И:
WooCommerce → Статус → System Status → Templates
Устаревший override шаблона, например cart/cart-shipping.php, способен привести к пропавшим или неправильно отображающимся вариантам доставки.
Безопасная последовательность проверки такая:
исходный checkout
→ core checkout
→ временно отключаем влияющие плагины
→ проверяем снова
Лучше делать это на staging-копии, если магазин принимает реальные заказы.
Если используется СДЭК, Boxberry, Почта или другой расчёт через API
↑ К оглавлениюЗдесь важно разделять две системы.
WooCommerce определяет, можно ли вообще предложить доставку для корзины и адреса.
А сторонний модуль перевозчика уже получает данные заказа и запрашивает тариф у внешнего сервиса.
Поэтому зона WooCommerce может быть настроена правильно, но конкретный перевозчик всё равно не вернёт цену.
Тогда проверяются уже:
- API credentials;
- адрес магазина или склада;
- страна и индекс покупателя;
- вес и размеры;
- ограничения тарифа;
- доступность API перевозчика;
- собственные логи модуля.
То есть ошибка:
«Доставка вообще отсутствует»
и ошибка:
«Зона определилась, но конкретный перевозчик не дал тариф»
— это разные уровни диагностики.
Как понять, где именно сломалась доставка
↑ К оглавлениюНе нужно менять десять настроек одновременно.
Проверяйте по цепочке:
1. Есть ли физический товар?
Если только Virtual — доставка не нужна.
2. Разрешена ли доставка в эту страну?
Проверяем общие настройки WooCommerce.
3. Какая зона соответствует адресу?
Включаем Shipping Debug Mode.
4. Есть ли в этой зоне активный метод?
Если нет — причина найдена.
5. Работает ли стандартный Flat Rate?
Временно добавьте простой Flat Rate в ту же зону.
Если он появился, сама логика WooCommerce работает, а проблема, вероятно, в стороннем shipping plugin.
6. Работает ли core checkout?
Если стандартный checkout показывает доставку, а кастомный — нет, ищем конфликт в теме, конструкторе или модификациях checkout.
7. Что показывают логи?
Проверяем WooCommerce Status Logs и собственные логи shipping plugin.
Так диагностика превращается из «доставка почему-то не работает» в конкретный уровень:
адрес
→ зона
→ метод
→ товар
→ checkout
→ плагин
→ API перевозчика
Что не стоит делать
↑ К оглавлениюНе переустанавливайте WooCommerce первым делом
Ошибки доставки гораздо чаще связаны с конфигурацией зон, методом или сторонним расширением, чем с повреждённой установкой WooCommerce.
Не меняйте сразу все зоны
После нескольких изменений будет непонятно, какое именно из них помогло.
Не ориентируйтесь только на свой адрес
Проблема может воспроизводиться только для отдельного региона или postcode.
Не считайте отсутствие веса универсальной причиной
Для core Flat Rate это не главный критерий. Для live rates — может быть критичным.
Не проверяйте только внешний вид checkout
Способ доставки может рассчитываться на сервере правильно, но быть скрыт CSS или не обновляться из-за JavaScript.
Если доставка всё равно не рассчитывается
↑ К оглавлениюЕсли зоны, методы и адрес выглядят правильно, но WooCommerce продолжает писать, что доставка недоступна, полезнее не перебирать настройки дальше, а зафиксировать конкретный тестовый заказ:
- товар;
- количество;
- страна;
- регион;
- город;
- индекс;
- ожидаемый способ доставки;
- фактически выбранная debug-зона;
- результат стандартного Flat Rate;
- ошибки из WooCommerce logs.
По этим данным обычно уже можно определить, проблема находится в WooCommerce, checkout, shipping plugin или внешнем API.
Для обращения за помощью не отправляйте пароли от админки, API secret keys и доступы к платежам в обычном сообщении.
FAQ
Почему WooCommerce пишет «Нет доступных способов доставки»?
Чаще всего адрес покупателя не соответствует нужной shipping zone либо в подходящей зоне нет активного способа доставки. Начинать диагностику нужно с зон, методов и postcode.
Почему доставка появляется только после ввода адреса?
Это может быть нормальным поведением. В WooCommerce можно не определять местоположение покупателя до ввода адреса, а также скрывать стоимость доставки до его заполнения.
Нужны ли вес и размеры товара для расчёта доставки?
Для стандартных Flat Rate, Free Shipping и Local Pickup они сами по себе не определяют доступность доставки. Но сторонние live-rate модули перевозчиков могут использовать вес и размеры при расчёте тарифа.
Почему доставка работает в обычном checkout, но пропадает в кастомном?
Причиной может быть сторонний checkout-модуль, тема, JavaScript или изменённые шаблоны WooCommerce. Для локализации проверьте тот же заказ через стандартный Cart/Checkout.
Помощь с WooCommerce
Если доставка WooCommerce не рассчитывается и нужно найти причину без перебора настроек вслепую, можно передать задачу мне.
Проверю цепочку от адреса и shipping zone до checkout, плагина перевозчика и ответа API, найду место, где пропадает тариф, и после исправления повторно проверю тот же сценарий.
Оформить задачу можно напрямую через WebFixer24 или через Kwork.