Как настроить собственный способ доставки в WooCommerce?

У меня возникла довольно простая проблема: необходимо добавить свой собственный метод доставки. В целом имеется необходимая документация, и, как кажется, всё должно пройти легко. <br/> <a href="https://developer.woocommerce.com/docs/shipping-method-api/" rel="nofollow">Вот ссылка на документацию<br/></a> <br/> Однако есть пара нюансов: <br/> <br/> <pre><code class="php">&lt;?php
/*
Plugin Name: PЭК Shipping Module
Description: Модуль доставки ПЭК для WooCommerce.
Version: 1.0
Author: 
*/

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Выход, если доступ напрямую
}

function pecom_shipping_method_init() {
    if ( ! class_exists( 'WC_Pecom_Shipping_Method' ) ) {
        class WC_Pecom_Shipping_Method extends WC_Shipping_Method {

            public function __construct() {
                $this-&gt;id                 = 'pecom_shipping';
                $this-&gt;method_title       = __( 'Доставка ПЭК', 'woocommerce' );
                $this-&gt;method_description = __( 'Модуль доставки ПЭК для WooCommerce.', 'woocommerce' );
                $this-&gt;enabled            = "yes";
                $this-&gt;title              = "Доставка ПЭК";
                $this-&gt;init();
            }

            /**
             * Инициализация настроек
             */
            function init() {
                // Загрузка настроек
                $this-&gt;init_form_fields();
                $this-&gt;init_settings();

                // Сохранение настроек
                add_action( 'woocommerce_update_options_shipping_' . $this-&gt;id, array( $this, 'process_admin_options' ) );
            }

            /**
             * Определение полей настроек
             */
            function init_form_fields() {
                $this-&gt;form_fields = array(
                 
  • 25 декабря 2024 г. 8:03
Ответы на вопрос 1
Чтобы настроить собственный способ доставки в WooCommerce, вы можете следовать приведенному ниже коду и рекомендациям. Вы уже начали разработку модуля доставки, и вот продолжение вашего кода с объяснением всех необходимых этапов.

### Полный пример кода для модуля доставки

```php
<?php
/*
Plugin Name: PЭК Shipping Module
Description: Модуль доставки ПЭК для WooCommerce.
Version: 1.0
Author: 
*/

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Выход, если доступ напрямую
}

function pecom_shipping_method_init() {
    if ( ! class_exists( 'WC_Pecom_Shipping_Method' ) ) {
        class WC_Pecom_Shipping_Method extends WC_Shipping_Method {

            public function __construct() {
                $this->id                 = 'pecom_shipping'; // Идентификатор метода доставки
                $this->method_title       = __( 'Доставка ПЭК', 'woocommerce' ); // Название метода
                $this->method_description = __( 'Модуль доставки ПЭК для WooCommerce.', 'woocommerce' ); // Описание метода
                $this->enabled            = "yes"; // Статус (включен)
                $this->title              = "Доставка ПЭК"; // Отображаемое название
                $this->init();
            }

            /**
             * Инициализация настроек
             */
            function init() {
                // Загрузка настроек
                $this->init_form_fields();
                $this->init_settings();

                // Сохранение настроек
                add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
            }

            /**
             * Определение полей настроек
             */
            function init_form_fields() {
                $this->form_fields = array(
                    'title' => array(
                        'title'       => __( 'Название', 'woocommerce' ),
                        'type'        => 'text',
                        'description' => __( 'Название, которое будет отображаться в процессе оформления заказа.', 'woocommerce' ),
                        'default'     => __( 'Доставка ПЭК', 'woocommerce' ),
                        'desc_tip'    => true,
                    ),
                    'cost' => array(
                        'title'       => __( 'Стоимость доставки', 'woocommerce' ),
                        'type'        => 'number',
                        'description' => __( 'Стоимость доставки на основе расстояния или веса товара.', 'woocommerce' ),
                        'default'     => '0',
                        'desc_tip'    => true,
                    ),
                );
            }

            /**
             * Расчет стоимости доставки
             */
            public function calculate_shipping( $package = array() ) {
                $cost = $this->get_option( 'cost' );
                $rate = array(
                    'id'    => $this->id,
                    'label' => $this->title,
                    'cost'  => $cost,
                );

                // Добавляем стоимость в корзину
                $this->add_rate( $rate );
            }
        }
    }
}

// Регистрация метода доставки
add_action( 'woocommerce_shipping_init', 'pecom_shipping_method_init' );

// Регистрация самих методов доставки
function add_pecom_shipping_method( $methods ) {
    $methods['pecom_shipping'] = 'WC_Pecom_Shipping_Method';
    return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_pecom_shipping_method' );
```

### Объяснение кода

1. **Определение плагина**: В самом начале вы определяете основные параметры вашего плагина, такие как имя, описание, версия и автор.

2. **Инициализация метода доставки**: 
   - При загрузке плагина проверяется наличие класса `WC_Pecom_Shipping_Method`.
   - В конструкторе класса указываются идентификатор, название, описание и возможность активации метода доставки.

3. **Настройки метода доставки**:
   - `init_form_fields()` — метод для определения полей настроек, которые будут отображаться в админ-панели WooCommerce.
   - Поля `title` и `cost` могут быть изменены администратором.

4. **Расчет стоимости доставки**:
   - Метод `calculate_shipping()` отвечает за расчет стоимости доставки и добавляет ее в массив доступных вариантов.

5. **Регистрация метода доставки**: 
   - `woocommerce_shipping_init` используется для инициализации метода доставки. 
   - `woocommerce_shipping_methods` позволяет добавить метод доставки в список доступных.

### Дальнейшие действия
После создания этого кода вам нужно:
1. Создать файл плагина,
Похожие вопросы