/ Сайтостроение / Плагины / Настройка доставки

Настройка доставки

HIT

03.11.2016

1709

Настройка доставки в woocommerce 2.6 кардинальным образом изменилась. Стала более гибкой, но и более сложной в настройке. Разберемся в тонкостях настройки доставки.

Зоны доставки

Зоны доставки — это определенная территория на которой действует 1 тариф. Например ЮФО, или РО, или Ростов-на-Дону или Октябрьский район (если по районам стоимость доставки должна отличатся).
При создании новой зоны WC предлагает выбрать регионы. Находим Россию. И чуть ниже поле для конкретных почтовых индексов — здесь мы должны прописать необходимые для данной территории индексы. Каждый индекс с новой строки.

Метод доставки

После того как мы создали зону, мы должны применить к ней метод доставки. Есть 3 метода доставки:

  • Единая ставка
  • Бесплатная доставка
  • Самовывоз

Выбирая метод Единая ставка нужно указать стоимость доставки по данной территории. После того как мы завели метод, можно переименовать его с Единая ставка на свое название. Кликнув на ссылку Единая ставка.

Методов можно сделать несколько, например Доставка по данной территории 500 руб, или Самовывоз 0 руб.

После того как мы завели зоны с методами доставки, данные виды доставки будут выводится и учитываться при формировании заказа, в тот момент когда покупатель будет указывать индекс.

Индексы Ростова-на-Дону

344000
344001
344002
344004
344006
344009
344010
344011
344012
344013
344015
344016
344018
344019
344020
344022
344023
344025
344029
344030
344032
344033
344034
344037
344038
344039
344041
344045
344048
344049
344055
344056
344058
344064
344065
344068
344069
344072
344079
344082
344090
344091
344092
344093
344094
344095
344101
344111
344112
344113
344114
344116

Описание метода доставки

Я столкнулся с тем, что нет функции описания метода доставки, на подобии как у методов оплаты. На данный момент нашел единственное решение, но корявое — плагин Shipping Icons and Descriptions for WooCommerce (20+).

Плагин дает возможность прописать описание, но только к 3-м методам доставки: Самовывоз, Единая ставка, Бесплатная доставка.
Это не очень удобно.

Вариант реализации при помощи jquery (работает только при отключении Ajax обновления страницы оформления, как это сделать — описано здесь)

$(document).ready(function() {

$('#shipping_method_0_flat_rate-6').parent('li').append('<div class="payment_box flat_rate"><p class="new">После оформления заказа наш менеджер свяжется с Вами для уточнения стоимости, времени и условий доставки.</p></div>');
$('#shipping_method_0_local_pickup-7').parent('li').append('<div class="payment_box local_pickup"><p class="new">Товар Вы сможете забрать по адресу: ...</p></div>');

$('#shipping_method_0_flat_rate-6').parent('li').click(function() {
$('.payment_box.local_pickup').slideUp(300);
$('.payment_box.flat_rate').slideDown(300);
});

$('#shipping_method_0_local_pickup-7').parent('li').click(function() {
$('.payment_box.flat_rate').slideUp(300);
$('.payment_box.local_pickup').slideDown(300);
});

});

Также скрываем блок который изначально не активен: .payment_box.local_pickup {display: none;}
ID блоков настраиваются индивидуально!

Как сделать один из вариантов доставки изначально активным и скрывать поля доставки при выборе вариант Самовывоз читайте здесь.

Изменять варианты оплаты при разных методах доставки

Я пробовал использовать эту функцию, но в моем случае она функционировала некорректно. Вариант оплаты пропадал и не появлялся при любом методе доставки.

function alter_shipping_methods($available_gateways){
global $woocommerce;
$chosen_titles = array();
$available_methods = $woocommerce->shipping->get_packages();
$chosen_rates = ( isset( $woocommerce->session ) ) ? $woocommerce->session->get( 'chosen_shipping_methods' ) : array();
foreach ($available_methods as $method)
foreach ($chosen_rates as $chosen) {
if( isset( $method['rates'][$chosen] ) ) $chosen_titles[] = $method['rates'][ $chosen ]->label;
}
if( in_array( 'Самовывоз', $chosen_titles ) ) {
unset($available_gateways['paypal']);
}
return $available_gateways;
}

add_action('woocommerce_available_payment_gateways', 'alter_shipping_methods');

Я решил реализовать функционал с помощью jquery

$('input:radio[name="shipping_method[0]"]').on('change', function () {
	
if ( $("#shipping_method_0_flat_rate-6").prop("checked") ) {
	//alert('выбрана Доставка');
        $("#ship-to-different-address-checkbox").click(); //Кликаем на Доставку
	$("li.payment_method_bacs input").click();
	$("li.payment_method_bacs input").click();
	$("li.wc_payment_method.payment_method_cod").hide();
}	

if ( $("#shipping_method_0_local_pickup-7").prop("checked") ) {
	//alert('выбран Самовывоз');		
        $("#ship-to-different-address-checkbox").click(); //Кликаем на Доставку
	$("li.wc_payment_method.payment_method_cod").show();
}
	
});

Первая строка отслеживает событие изменение метода доставки.
Далее и идет проверка активен ли пункт с определенным методом доставки и в зависимости от этого скрывается ненужные варианты оплаты. Но при этом если вариант оплаты, который будет скрыватся активен, то нужно убрать с него активность. Для этого вызываем триггер — клик по другому варианту доставки и обязательно дважды (с первого раза пункт переключается, но не раскрывается описание метода оплаты).

$(«#ship-to-different-address-checkbox»).click(); — эта строка для открытия/скрытия полей доставки.

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

В методе бесплатной доставки можно выставить условие по цене с какой суммы она будет предлагаться, а вот в платном варианте доставки нет такой возможности. Скроем ее с помощью jQuery

// Убираем способ платный метод доставки, если сумма более 1000 руб.
var price = $(".order-total span.woocommerce-Price-amount.amount").text();
var numprice = parseInt(price.replace(/\D+/g,""));

if(numprice >= 1000) {
$("#shipping_method_0_flat_rate-7").hide();
$("#shipping_method_0_flat_rate-7").next().hide();
}

Пожалуйста, введите адрес для продолжения

С одной из последних версий WC стал требовать чтобы при любых обстоятельствах в платежных полях было поле Страна (в независимости от того что торгуем и доставляем мы только в одной стране).

Решение: включаем это поле (если торгуем в одной стране, то значение будет выбрано сразу) и делаем его невидимым.

//unset($fields['billing']['billing_country']); //Страна
#billing_country_field {display: none;}

Тэги: ,

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Скидки Woocommerce

Скидки Woocommerce

Добавляем и настраиваем в woocommerce различные системы скидок. Стандартная скидка Woocommerce Можно включить «акционную» цену на товар, к ней можно добавить дату окончания скидки. У товара появляется лэйбл «Распродажа», можно Читать далее »

WooCommerce and 1C:Enterprise

WooCommerce and 1C:Enterprise

Разбираем на элементы плагин WooCommerce and 1C:Enterprise/1С:Предприятие Data Exchange. Плагин дает функционал обмена данными между сайтом и программой 1С: Предприятие. Некоторые моменты синхронизации сайта с 1С описаны в статье Интеграция Читать далее »

Woocommerce основы

Woocommerce основы

Наиболее часто встречающиеся и необходимые вызовы при использовании плагина woocommerce, а так же прочие хитрости при работе с woocommerce. <?php echo $_product->get_sku( $cart_item ); ?> // Вывести артикул в корзине Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Настройка доставки
Бонусная система
Рекомендации для васБонусная системаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.