WooCommerce: как добавить собственный тип доставки с помощью кода

Что такое собственный тип доставки в WooCommerce и зачем он нужен

WooCommerce по умолчанию предлагает несколько типов доставок: фиксированная ставка, бесплатная доставка, доставка по месту. Иногда требуется добавить уникальный способ доставки, например, курьер с точным временем, доставка с дополнительными условиями или интеграция с локальным перевозчиком. В таких случаях добавление собственного типа доставки через код — оптимальное решение без лишних плагинов.

Диагностика задачи: когда нужен кастомный метод доставки

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

  • Название и описание способа доставки;
  • Логика расчёта стоимости;
  • Особые условия (например, ограничение по регионам);
  • Отображение в корзине и на странице оформления заказа.

Пошаговое руководство по добавлению собственного типа доставки

1. Создаём класс с методом доставки

Добавьте следующий код в файл functions.php вашей активной темы или в отдельный плагин:

if ( ! class_exists( 'WC_Custom_Shipping_Method' ) ) {
    class WC_Custom_Shipping_Method extends WC_Shipping_Method {
        public function __construct() {
            $this->id                 = 'custom_shipping';
            $this->method_title       = __( 'Собственная доставка', 'woocommerce' );
            $this->method_description = __( 'Кастомный метод доставки с фиксированной ставкой.', 'woocommerce' );

            $this->enabled            = 'yes';
            $this->title              = 'Курьерская доставка';

            $this->init();
        }

        function init() {
            // Загружаем настройки
            $this->init_form_fields();
            $this->init_settings();

            $this->cost = isset( $this->settings['cost'] ) ? $this->settings['cost'] : 0;

            add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
        }

        public function calculate_shipping( $package = array() ) {
            $rate = array(
                'id'    => $this->id,
                'label' => $this->title,
                'cost'  => $this->cost,
                'calc_tax' => 'per_order'
            );

            $this->add_rate( $rate );
        }
    }
}

2. Регистрируем метод доставки в WooCommerce

Добавьте регистрацию класса методом в WooCommerce:

function add_custom_shipping_method( $methods ) {
    $methods['custom_shipping'] = 'WC_Custom_Shipping_Method';
    return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_custom_shipping_method' );

3. Настройка стоимости доставки в админке

Вы можете добавить поле для настройки стоимости доставки:

public function init_form_fields() {
    $this->form_fields = array(
        'enabled' => array(
            'title'       => __( 'Включить', 'woocommerce' ),
            'type'        => 'checkbox',
            'description' => __( 'Включить этот способ доставки', 'woocommerce' ),
            'default'     => 'yes'
        ),
        'cost' => array(
            'title'       => __( 'Стоимость доставки', 'woocommerce' ),
            'type'        => 'text',
            'description' => __( 'Фиксированная стоимость доставки', 'woocommerce' ),
            'default'     => '100',
            'desc_tip'    => true,
        ),
    );
}

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

Чтобы проверить, что ваш способ доставки работает:

  • Перейдите в WooCommerce → Настройки → Доставка и выберите зону доставки.
  • Добавьте новый метод доставки и выберите «Собственная доставка».
  • Перейдите на страницу оформления заказа и проверьте отображение нового способа доставки с указанной стоимостью.
  • Попробуйте сделать тестовый заказ, чтобы убедиться, что стоимость корректно применяется.

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

  • Метод доставки не отображается в списке: Проверьте, что вы правильно зарегистрировали класс и используете правильный идентификатор ($this->id).
  • Стоимость всегда равна нулю: Убедитесь, что поле cost инициализировано и возвращается в методе calculate_shipping.
  • Ошибки PHP при вызове методов: Проверьте, что класс наследует WC_Shipping_Method и все необходимые методы реализованы.

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

  • Не храните критичные данные доставки в пользовательских метах без проверки безопасности и валидации.
  • Используйте кеширование, если расчёт стоимости зависит от внешних API или сложных вычислений.
  • Тестируйте интеграцию на стейджинге перед продакшеном, чтобы избежать конфликтов с другими плагинами доставки.

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

СпособПлюсыМинусы
Через код (как в статье)Гибкость, легковесность, контрольТребует навыков программирования
Через плагин (например, WooCommerce Table Rate Shipping)Удобство, готовые функцииПлагины добавляют нагрузку, могут конфликтовать
Использование сторонних сервисовАвтоматизация доставки и расчётаЗависимость от внешних API, возможны сбои
WooCommerce: как изменить количество товаров в корзине без перезагрузки страницы
18.05.2026
Как удалить неиспользуемые таксономии в WordPress
22.02.2026
Как установить и настроить WooCommerce на WordPress
01.12.2025
WooCommerce: автоматическая очистка корзины и отслеживание брошенных заказов
23.04.2026
Диагностика и решение проблем PHP Fatal Error в WordPress
09.01.2026