Автоматическое отключение способов доставки по регионам WooCommerce

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

В интернет-магазинах на WooCommerce часто возникает необходимость ограничить способы доставки в зависимости от региона покупателя. Например, доставка курьером возможна только в городах-миллионниках, а в удалённые регионы — исключительно почтой. Без такой настройки пользователи могут видеть неподходящие варианты доставки, что ухудшает UX и приводит к ошибкам в заказах.

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

Как определить, что способы доставки не фильтруются по региону

  • Проверьте корзину и оформление заказа с разными адресами доставки из нескольких регионов.
  • Если все способы доставки доступны вне зависимости от региона, значит фильтрация не настроена.
  • Включите отладку WooCommerce (в wp-config.php добавить define('WP_DEBUG', true);) и посмотрите логи, если есть кастомные фильтры, возможно, они конфликтуют.

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

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

1. Определяем регион из адреса доставки

В WooCommerce регион — это штат, область или регион, который передаётся в параметре $package['destination']['state'] или $package['destination']['country'].

2. Функция фильтрации способов доставки

add_filter('woocommerce_package_rates', 'filter_shipping_methods_by_region', 10, 2); function filter_shipping_methods_by_region($rates, $package) {     // Получаем регион и страну из адреса доставки     $state = isset($package['destination']['state']) ? $package['destination']['state'] : '';     $country = isset($package['destination']['country']) ? $package['destination']['country'] : '';      // Пример: отключаем курьерскую доставку (ID 'flat_rate:3') для регионов, кроме Москвы и Московской области     $allowed_states = ['MOW', 'MOS']; // коды регионов по ISO или slug, уточните в вашей базе     foreach ($rates as $rate_id => $rate) {         if ($rate->method_id === 'flat_rate' && $rate_id === 'flat_rate:3') {             if (!in_array($state, $allowed_states)) {                 unset($rates[$rate_id]);             }         }     }      return $rates; }

В этом коде:

  • flat_rate:3 — ID метода доставки, который нужно отключить по условию (получить ID можно из настроек WooCommerce или отладчиком).
  • В массиве $allowed_states задаются регионы, для которых доставка разрешена.
  • Метод доставки удаляется из списка, если регион не подходит.

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

  • Перейдите в корзину или оформление заказа.
  • В поле адреса доставки укажите регион, который не входит в $allowed_states. Способ доставки с ID flat_rate:3 должен отсутствовать.
  • В другом регионе, который есть в списке разрешённых, способ должен отображаться.
  • Если способ доставки пропадает или появляется некорректно, проверьте ID методов и правильность регионов.

Частые ошибки и как их исправить

  • Неправильный ID способа доставки. Используйте инструмент WooCommerce > Настройки > Доставка, включите отладку или плагин WooCommerce Shipping Debug для просмотра ID.
  • Регион не совпадает с кодами в массиве. В WooCommerce коды регионов зависят от страны — для РФ это коды ISO 3166-2 (например, MOW — Москва). Уточните в базе WooCommerce или используйте print_r($package['destination']) для отладки.
  • Конфликт с другими плагинами доставки. Отключите сторонние плагины и проверьте работу фильтра отдельно.
  • Кэширование страниц. После изменений сбросьте кэш сайта и браузера, чтобы увидеть актуальный результат.

Практические советы по безопасности и производительности

  • Не используйте тяжелые операции внутри фильтра woocommerce_package_rates, чтобы не замедлять загрузку страницы оформления заказа.
  • Проверяйте входные данные — регион и страну — на валидность, чтобы избежать ошибок и уязвимостей.
  • Для сложных правил доставки лучше использовать специализированные плагины, например Clearfy Pro с расширенными настройками доставки и SEO.

Сравнение подходов: код против плагинов

Метод Плюсы Минусы
Самописный код (фильтр woocommerce_package_rates) Легко кастомизировать, бесплатно, контролируемая логика Требует знаний PHP, может конфликтовать с обновлениями и плагинами
Плагины для управления доставкой Удобный интерфейс, поддержка, много функций (условия, группы) Стоимость, нагрузка на сайт, могут быть избыточны для простой задачи

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как автоматически удалять большие файлы в WordPress: практическое решение
09.04.2026
Оптимальная структура permalinks в WordPress: настройка и примеры
02.12.2025
Как использовать хуки WordPress для эффективного контроля записей
06.12.2025
Как автоматизировать удаление пустых комментариев в WordPress
15.04.2026
Как добавить динамические метаданные в WordPress для улучшения SEO
22.01.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше