У меня на сайте уже есть подобный урок про создание метода оплаты (платёжного шлюза, другими словами). Теперь попробуем создать способ доставки для интернет-магазина на WooCommerce.
Нужна помощь с разработкой способа доставки WooCommerce? Пишите, я и моя команда будем рады вам помочь.
Если же вы пришли на этот гайд, чтобы сделать всё сами, тогда вперёд!
Окей, ваша первая задача – создать плагин для WordPress. Звучит немного по-капитански, потому что весь этот урок мы делаем не что иное, как создаём плагин. Но по сути для начала нам нужно создать именно главный файл плагина, с его мета-информацией. Тут могу порекомендовать прочекать моё руководство по созданию плагина для WordPress.
Тем не менее, давайте ещё раз сделаем это вместе с вами. Для этого внутри папки wp-content/plugins
создаем произвольный файл, который можем назвать как-нибудь, я назову его truemisha-shipping-method.php
, его ещё можно поместить в папку с таким же названием, это нужно, если плагин внезапно будет состоять больше, чем из одного файла.
Внутрь плагина мы закидываем какую-либо мета-информацию, посмотрите, о чём я говорю:
<?php
/*
* Plugin Name: Плагин доставки от Миши для вас
* Plugin URI: https://misha.agency/woocommerce/sozdanie-plagina-dostavki.html
* Description: Ваш супер-плагин доставки для интернет-магазина WooCommerce
* Version: 1.0.0
* Author: Миша Рудрастых
* Author URI: https://misha.agency
*/
Как только вы сделаете это и сохраните ваш файл, то переходите в меню в админке на страницу плагинов и активируйте его:
Чуть позже я начну показывать и описывать PHP-класс доставки, так вот, его вам нужно вставить внутрь функции, подключаемый на хук woocommerce_shipping_init
. А вообще, если вы не знаете, куда вставлять код из моих уроков, то я рекомендую вам это руководство.
add_action( 'woocommerce_shipping_init', 'truemisha_add_shipping_method' ); function truemisha_add_shipping_method() { // сюда вставляйте класс }
При создании вашего класса доставки убедитесь, что он расширяет класс WooCommerce WC_Shipping_Method
, благодаря чему у вас есть доступ к необходимым методам WooCommerce.
if ( ! class_exists( 'WC_Truemisha_Shipping_Method' ) ) { class WC_Truemisha_Shipping_Method extends WC_Shipping_Method { /** * Конструктор класса */ public function __construct() { $this->id = 'truemisha_shipping_method'; $this->title = 'Мишин способ доставки'; $this->method_description = 'Какое-то описание способа доставки'; $this->enabled = 'yes'; // эту опцию можно добавить внутрь настроек, в данном случае мы захардкодили её немного $this->init(); } /** * Инициализируем настройки */ function init() { // API настроек // $this->init_form_fields(); // Мы можем перезаписать этот метод, чтобы добавить свои настройки // $this->init_settings(); // This is part of the settings API. Loads settings you previously init. // Сохраняем настройки add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) ); } /** * Расчёт стоимости доставки */ public function calculate_shipping( $package ) { // тут будем добавлять различные правила для расчёта доставки } } }
После того, как вы добавиил этот класс в код, нам также нужно дать WooCommerce знать, что он существует при помощи ещё одного фильтр-хука:
add_filter( 'woocommerce_shipping_methods', 'truemisha_add_shipping_class' ); function truemisha_add_shipping_class( $methods ) { $methods[ 'truemisha_shipping_method' ] = 'WC_Truemisha_Shipping_Method'; return $methods; }
Создание опций для методов доставки очень похоже на создание опций для платёжных шлюзов, и так как про платёжные шлюзы у меня уже есть отдельное руководство, то я сейчас не буду описывать одно и то же, но зато дам вам ссылку.
Тут мы с вами будем говорить о методе calculate_shipping()
, который я также упоминал чуть выше в конструкторе класса, мы производём различные расчеты и добавим их при помощи метода add_rate()
, например вот так:
$this->add_rate( array( 'label' => 'Какой-то описание', // можем использовать $this->get_title() 'cost' => '10.99', // стоимость в текущей валюте магазина 'calc_tax' => 'per_item' // может быть per_item и per_order ) );
Если вы всё сделали правильно, то после вставки всего этого кода, в корзине у вас появится возможность выбрать наш способ доставки:
Нужна помощь с разработкой способа доставки WooCommerce? Пишите, я и моя команда будем рады вам помочь.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Добрый день
можете уточнить есть ли возможность через плагин сделать переменное количество способов доставки? Если к примеру есть раздел woocommerce содержащий службы доставки и надо поднимать цены из этого раздела? Спасибо
Добрый день, думаю да
Добрый день.
После включения приведенного кода попытка обрашения к сайту приводила к такой ошибке:
«Fatal error: Class 'WC_Shipping_Method' not found in Путь к исходнику, строка»
Попробовал включить инструкцию:
include ('Путь к каталогу/woocommerce.php');
Теперь получаю:
«WC_Delivery_Shipping_Method::calculate_shipping($package) should be compatible with
WC_Shipping_Method::calculate_shipping($package = Array) in Путь к исходнику, строка»
Может поможете разобраться?
Спасибо.
Пардон, пропустил начало сообщения:
«Warning: Declaration of WC_Delivery_Shipping_Method::.....»
Хорошо бы добавить в конструктор класса поддержку зон итп