Как добавить собственный способ доставки в WooCommerce
Опубликовано: 2020-09-01
Если вы знакомы с WooCommerce, вы знаете, что это отличное бесплатное решение для электронной коммерции с невероятно полезным набором функций. Что выделяется, так это то, что WooCommerce разработан с учетом расширяемости, аналогичной модульности WordPress.
Однако, если вам нужно что-то дополнительное от WooCommerce, вы часто обнаружите, что WooCommerce не дает вам всего, что вам нужно, например, если вы хотите добавить собственный способ доставки. Тем не менее, не волнуйтесь, так как в этом кратком руководстве вы узнаете, как создать простой способ доставки для WooCommerce, который рассчитает стоимость доставки.
Кроме того, вы узнаете, как добавить некоторые ограничения в наш плагин, чтобы способ доставки был доступен для некоторых стран.
Пользовательские правила доставки для способов доставки
В этом разделе мы создадим пользовательские правила доставки для методов доставки, которые мы собираемся использовать для создания кода. Мы определим, как метод доставки будет рассчитывать стоимость и куда он может быть доставлен. Это означает, что стоимость будет определяться весом и зоной, в которую нам нужно отправить товар.
В этом примере мы отправим товар в США, Канаду, Германию, Великобританию, Италию, Испанию и Кению. Кения будет нашей зоной 0 за 10 долларов, Италия, зона 1 за 30 долларов, Испания, зона 2 за 50 долларов, Великобритания, зона 2 за 50 долларов, США и Канада, зона 3 за 70 долларов.
Что касается веса, мы будем оценивать их следующим образом: 0–10 кг бесплатно, 11–30 кг за 5 долларов, 31–50 кг за 10 долларов и 51–100 кг за 20 долларов.
Возможно, вы готовы начать кодирование, но не сейчас! Во-первых, вам нужно узнать об API доставки WooCommerce . Если вы хотите создать собственный метод доставки, вам необходимо расширить класс из абстрактного класса WooCommerce WC_Shipping_Method. Он имеет некоторые определенные атрибуты, а именно:
-
$id: Идентификатор (слаг, ключевое слово) нашей доставки, который требуется. -
$number: это целочисленный идентификатор. -
$method_title: название нашей доставки, отображаемое в админке. -
$method_description: краткое описание нашей доставки, отображаемое в админке (необязательно). -
$enabled: Строковое логическое значение, «да» или «нет», которое дает информацию о том, включена ли наша доставка и можно ли ее использовать или нет. -
$title: используется для отображения нашего имени доставки на нашем сайте. -
$availability: это определяет, доступна ли доставка или нет. -
$countries: Массив стран, для которых включен этот метод. Значение по умолчанию — пустой массив. -
$tax_status: значение по умолчанию облагается налогом. Если объект подлежит налогообложению, то налог будет взиматься. -
$fee: значение по умолчанию равно 0. -
$minimum_fee: минимальная плата за метод и значение по умолчанию равно нулю. -
$has_settings: определяет, имеет ли этот метод какие-либо настройки. Значение по умолчанию верно. -
$supports: массив, содержащий функции, поддерживаемые этим методом. Значение по умолчанию — пустой массив. -
$rates: массив тарифов, который необходимо заполнить для регистрации стоимости доставки. Значение по умолчанию — пустой массив.
Определенные методы в WC_Shipping_Method:
-
is_taxable(): это возвращает, нужно ли нам рассчитать налог сверх стоимости доставки. -
add_rate( $args = array() ): это помещает скорость доставки, определенную в параметре $args, в атрибут $rates. -
has_settings(): возвращает значение атрибута $has_settings. -
is_available(): возвращает, если доставка доступна и если в атрибуте $countries указаны страны, а для атрибута $availability заданы значения, включая, конкретные или исключающие, будет возвращено значение true или false, если страна доступна для доставки. . -
get_title(): возвращает название этой доставки. -
get_fee( $fee, $total ): возвращает значение комиссии за эту доставку на основе проанализированных $fee и $total. -
supports( $feature ): возвращается, если этот метод доставки поддерживает функцию или нет.
Поскольку класс WC_Shipping_Method расширяет класс WC_Settings_API, в нем больше атрибутов и методов, которые я не буду здесь объяснять для простоты.
Кроме того, необходимо определить другие методы, чтобы служба доставки могла получить или установить настройки и рассчитать фактическую стоимость доставки. Эти методы перечислены здесь:
-
init(): создает поля и настройки формы. Однако его можно назвать по-разному, если мы используем методы внутри него и вызываем его в методе __constructor. -
calculate_shipping( $package ): этот метод используется для расчета стоимости этой доставки, а пакет представляет собой массив с продуктами для доставки.
Я хотел бы уделить некоторое внимание методу calculate_shipping. Для нашего примера мы будем использовать этот метод и добавим его в метод add_rate. Этот метод примет массив с несколькими параметрами, такими как:
-
id: это идентификатор ставки. -
label: это метка для скорости. -
cost: Сумма доставки. -
taxes: он принимает массив налогов или ничего, поэтому налог рассчитывается WooCommerce. Если вы не хотите, чтобы он принимал налог, он может принять ложный. -
calc_tax: принимает per_order или per_item. Если вы используете per_item, необходимо указать массив затрат.
Мы будем использовать фильтр WordPress, чтобы получить массив, который добавляет наш метод доставки в массив зарегистрированного метода, передав имя нашего класса, используя фильтр WordPress, определенный внутри плагина WooCommerce. Фильтр называется woocommerce_shipping_methods.
С этим на столе давайте теперь перейдем к разделу кодирования этого краткого руководства, чтобы вы могли понять всю концепцию в фрагментах PHP, которыми я собираюсь поделиться.
а) Шаги по созданию нового класса доставки
В этом разделе мы создадим наш способ доставки в виде нового плагина, расширяющего возможности WooCommerce.
- Во-первых, вам нужно открыть wp-content > plugins и создать новую папку. Для этого я буду использовать имя njengah -shipping.
- Затем вам нужно создать файл с тем же именем njengah —shipping.php
- В этот файл добавьте следующий код:
<?php
/**
* Название плагина: Njengah Shipping
* URI плагина: https://njengah.com/plugins/
* Описание:
* Версия: 1.0.0
* Автор: Джо Нженга
* URI автора: https://njengah.com
с
*/
если ( ! определено ('WPINC') ) {
умри;
}
/*
* Проверьте, активен ли WooCommerce
*/
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')) )) {
функция njengahplus_shipping_method () {
если (! class_exists('NjengahPlus_Shipping_Method') ) {
класс NjengahPlus_Shipping_Method расширяет WC_Shipping_Method {
/**
* Конструктор для вашего класса доставки
*
* @публичный доступ
* @возврат недействителен
*/
публичная функция __construct() {
$this->id = 'njengahplus';
$this->method_title = __('Доставка NjengahPlus', 'njengahplus');
$this->method_description = __('Специальный метод доставки для NjengahPlus', 'njengahplus');
$это->инициализировать();
$this->enabled = isset($this->settings['enabled'] )? $this->settings['enabled'] : 'да';
$this->title = isset($this->settings['title'] ) ? $this->settings['title'] : __('NjengahShipping', 'njengahplus');
}
/**
* Запустите свои настройки
*
* @публичный доступ
* @возврат недействителен
*/
инициализация функции () {
// Загружаем API настроек
$this->init_form_fields();
$this->init_settings();
// Сохраняем настройки в админке, если у вас есть определенные
add_action('woocommerce_update_options_shipping_'. $this->id, array($this, 'process_admin_options'));
}
/**
* Определить поле настроек для этой доставки
* @возврат недействителен
*/
функция init_form_fields() {
// Сюда мы добавим наши настройки
}
/**
* Эта функция используется для расчета стоимости доставки. В рамках этой функции мы можем проверить вес, размеры и другие параметры.
*
* @публичный доступ
* @param смешанный пакет $
@вернуть недействительным
*/
общедоступная функция calculate_shipping ($ пакет) {
// Сюда мы добавим стоимость, скорость и логику
}
}
}
}
add_action('woocommerce_shipping_init', 'njengahplus_shipping_method');
функция add_njengahplus_shipping_method ($ методы) {
$methods[] = 'NjengahPlus_Shipping_Method';
методы возврата $;
}
add_filter('woocommerce_shipping_methods', 'add_njengahplus_shipping_method');
}Как это работает
- Сначала мы проверяем, определена ли константа WPINC. Если он не определен, то это означает, что кто-то пытается получить доступ к этому файлу напрямую или из места, которое не является WordPress.
- Затем нам нужно проверить, активен ли WooCommerce. Здесь мы проверяем, находится ли woocommerce.php в массиве активных плагинов, которые сохраняются в базе данных под опцией active_plugins.
- woocommerce_shipping_init — это основное действие для доставки WooCommerce, которое включает все классы доставки до того, как они будут созданы. Использование этого действия гарантирует, что наш способ доставки будет включен после инициализации WooCommerce и в правильном месте, где WooCommerce сможет его использовать.
- Метод __construct устанавливает некоторые общие атрибуты, и некоторые из них могут быть легко перезаписаны после загрузки настроек из базы данных в методе init.
- Другие методы оставлены пустыми, потому что мы определим их позже в этом руководстве.
Затем вам нужно активировать плагин, выполнив шаги, показанные ниже:

- Войдите на свой сайт WordPress и получите доступ к панели инструментов в качестве пользователя-администратора.
- В меню «Панель инструментов» нажмите « Плагины» и активируйте доставку Njengah, как показано ниже:

- После активации плагина перейдите в WooCommerce > Settings . Нажмите на вкладку WooCommerce, затем нажмите на доставку NjengahPlus . Вы должны увидеть это:

б) Настройка доступности страны
Созданный нами способ доставки доступен только в ранее определенном списке стран.
- Добавьте это в метод __construct :
<?php
//...
$this->method_description = __('Специальный метод доставки для NjengahPlus', 'njengahplus');
// Доступность и страны
$this->availability = 'включая';
$this->countries = массив(
«США», // Соединенные Штаты Америки
'Калифорния', // Канада
'DE', // Германия
'ГБ', // Великобритания
'ИТ', // Италия
'ES', // Испания
HR // Кения
);
$это->инициализировать();
//...Как работает код
Для атрибута доступности установлено значение «включая», чтобы эта доставка была доступна только для стран, указанных в атрибуте «страны».
WooCommerce проверит, включена ли страна доставки в страны атрибутов.
Создание настроек
Вам нужно просто скопировать этот код и заполнить наш метод init_form_fields:
<?php
функция init_form_fields() {
$this->form_fields = массив(
'включено' => массив(
'title' => __('Включить', 'njengahplus'),
'тип' => 'флажок',
'description' => __('Включить эту доставку.', 'njengahplus'),
'по умолчанию' => 'да'
),
'название' => массив (
'title' => __('Название', 'njengahplus'),
'тип' => 'текст',
'description' => __('Заголовок для отображения на сайте', 'njengahplus'),
'по умолчанию' => __( 'Доставка NjengahPlus', 'njengahplus' )
),
);
}Чтобы проверить результат, выполните следующие действия:
- Войдите на свой сайт WordPress и получите доступ к панели инструментов в качестве пользователя-администратора. В меню панели инструментов выберите WooCommerce > Настройки .
- Перейдите на вкладку « Доставка » и нажмите «Доставка NjengahPlus», как показано ниже:

- Установите флажок и сохраните изменения.
Мы можем установить способ доставки до 100 кг. Затем мы разрешим редактировать это в настройках, если это правило скоро изменится. После этого код настроек будет выглядеть так:
<?php
функция init_form_fields() {
$this->form_fields = массив(
'включено' => массив(
'title' => __('Включить', 'njengahplus'),
'тип' => 'флажок',
'description' => __('Включить эту доставку.', 'njengahplus'),
'по умолчанию' => 'да'
),
'название' => массив (
'title' => __('Название', 'njengahplus'),
'тип' => 'текст',
'description' => __('Заголовок для отображения на сайте', 'njengahplus'),
'по умолчанию' => __( 'Доставка NjengahPlus', 'njengahplus' )
),
'вес' => массив(
'title' => __( 'Вес (кг)', 'njengahplus' ),
'тип' => 'число',
'description' => __('Максимально допустимый вес', 'njengahplus'),
'по умолчанию' => 100
),
);
} В приведенном выше коде мы установили максимальный вес в настройках. Вот результат: 
в) Расчет стоимости доставки
Чтобы рассчитать стоимость доставки, мы будем обновлять метод calculate_shipping шаг за шагом, чтобы вы могли понять каждый шаг.
- Во-первых, нам нужно получить стоимость по весу . Для этого просто добавьте этот код в метод calculate_shipping:
<?php
//...
общедоступная функция calculate_shipping ($ пакет) {
$ вес = 0;
$стоимость = 0;
$country = $package["назначение"]["страна"];
foreach ($package['contents'] as $item_id => $values)
{
$_product = $значения['данные'];
$вес = $вес + $_product->get_weight() * $values['количество'];
}
$вес = wc_get_weight($вес, 'кг');
если ( $ вес <= 10 ) {
$стоимость = 0;
} elseif($вес <= 30) {
$стоимость = 5;
} elseif($вес <= 50) {
$стоимость = 10;
} еще {
$стоимость = 20;
}
}
- Из приведенного выше кода у нас есть стоимость, основанная на весе тележки, мы должны рассчитать стоимость для выбранной страны доставки. Для этого добавьте этот код:
<?php
общедоступная функция calculate_shipping ($ пакет) {
$countryZones = массив(
'ЧСС' => 0,
'США' => 3,
'ГБ' => 2,
'КА' => 3,
'ЭС' => 2,
'ДЕ' => 1,
'ЭТО' => 1
);
$zonePrices = массив (
0 => 10,
1 => 30,
2 => 50,
3 => 70
);
$zoneFromCountry = $countryZones[$country];
$priceFromZone = $zonePrices[$zoneFromCountry];
$cost += $priceFromZone;
}
- Мы рассчитали стоимость по общему весу, а также добавили стоимость по стране доставки. Последний шаг — добавить этот код для регистрации скорости.
Как работает код
В первом фрагменте этого раздела мы определили несколько начальных переменных: $weight , $cost и $country . Чтобы получить общее количество, мы получаем общий вес, повторяя корзину и добавляя вес каждого продукта в корзине к переменной $weight .
Получив общий вес, мы используем function wc_get_weight для преобразования веса в килограммы, поскольку это единица, для которой наш метод доставки установил ограничение. Тогда последним делом было ограничение в 100 кг.
Во втором фрагменте массив $countryZones содержит зоны для каждой страны, а второй массив $zonePrices содержит цены для каждой зоны.
Это будет результат для Италии, Зона 1: 
Это будет результат для зоны Испании 2: 
Это будет результат для Зоны Канады:

Если вам было трудно реализовать этот код, вот полный код:
<?php
общедоступная функция calculate_shipping ($ пакет) {
$ вес = 0;
$стоимость = 0;
$country = $package["назначение"]["страна"];
foreach ($package['contents'] as $item_id => $values)
{
$_product = $значения['данные'];
$вес = $вес + $_product->get_weight() * $values['количество'];
}
$вес = wc_get_weight($вес, 'кг');
если ( $ вес <= 10 ) {
$стоимость = 0;
} elseif($вес <= 30) {
$стоимость = 5;
} elseif($вес <= 50) {
$стоимость = 10;
} еще {
$стоимость = 20;
}
$countryZones = массив(
'ЧСС' => 0,
'США' => 3,
'ГБ' => 2,
'КА' => 3,
'ЭС' => 2,
'ДЕ' => 1,
'ЭТО' => 1
);
$zonePrices = массив (
0 => 10,
1 => 30,
2 => 50,
3 => 70
);
$zoneFromCountry = $countryZones[$country];
$priceFromZone = $zonePrices[$zoneFromCountry];
$cost += $priceFromZone;
$ скорость = массив (
'id' => $this->id,
'метка' => $this->название,
'стоимость' => $стоимость
);
$this->add_rate($rate);
}
Вывод
В этом посте мы создали собственный плагин для добавления пользовательского метода доставки в WooCommerce. Кроме того, я поделился с вами API доставки WooCommerce, который позволяет вам создать свой способ доставки с помощью простых шагов. Кроме того, ограничения и доступность могут быть установлены внутри метода доставки при расчете доступности или стоимости метода доставки. Однако их можно установить вне метода доставки с помощью действий WooCommerce. Я надеюсь, что это руководство предоставило решение для добавления пользовательского метода доставки в WooCommerce.
Похожие статьи
- Как добавить номера GTIN к продуктам в WooCommerce
- Как удалить сообщение «Добавлено в корзину» WooCommerce
- Как добавить трастовый или безопасный логотип на страницу оформления заказа WooCommerce
- Выход из WooCommerce без подтверждения: как удалить «Вы уверены, что хотите выйти?»
- Как перенаправить страницу WordPress без плагинов?
- Как добавить изображение продукта на страницу оформления заказа WooCommerce
- Как установить рекомендуемые продукты в WooCommerce
- Как скрыть поле кода купона WooCommerce
- Как отображать продукты WooCommerce по категориям
- Как скрыть все товары со страницы магазина в WooCommerce
- Как сортировать категории WooCommerce для лучшего взаимодействия с пользователем
- Как продавать цифровые продукты с помощью WooCommerce
- Как изменить уведомление WooCommerce «Добавлено в корзину»
- Как отключить способ оплаты для определенной категории
- 30+ лучших плагинов WooCommerce для вашего магазина (большинство бесплатны)
- Как переименовать сообщения о статусе заказа в WooCommerce
- 23 лучших плагина WooCommerce для настройки страницы оформления заказа
- Как удалить стандартную сортировку товаров WooCommerce
- Как проверить, активен ли плагин в WordPress [3 СПОСОБА]
