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

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

HIT

03.11.2016

1121

Настройка доставки в 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 выводит категории и товары в один список (если включить настройку выводить категории и товары). Но нам, например, необходимо категории оформить по другому. Для этого нужно отделить категории Читать далее »

Оформление полей заказчика

Оформление полей заказчика

При заказе товара необходимо заполнить данные покупателя (имя, телефон, адрес доставки и т.д.). В стандартном варианте поля эти несколько «раздуты», много лишнего, требуется некоторое оформление. Можно использовать плагин Saphali Woocommerce Читать далее »

/

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

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

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