Как добавить собственный способ доставки в 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 СПОСОБА]