Приветствую, народ!
Существует некоторая проблема, которую я почти решил с помощью этого плагина. Перед созданием темы я активно проштудировал гугл и тп, но пока не к чему не пришел. Может существуют аналогичные плагины или решения, то направьте, буду очень благодарен. Надеюсь что мой пост здесь уместен.
Начну с того, что начали работать над магазином, который нацелен торговать по России. Предположим, что магазин находится в Хабаровске. Магазин так же торгует и в Хабаровске. В настройках магазина адрес прописан - г. Хабаровск, ул. Васи Пупкина и тд. Магазин так же нацелен чтобы жители Хабаровска покупали товары самовывозом и курьером (300 рублей за доставку). Но если сумма заказа превышает 3000, то доставка бесплатна. Если же я выставляю в настройках WooCommerce варианты доставки типа:
1. Доставка курьером - 300 рублей.
2. Бесплатная доставка (от 3000 рублей) - 0 рублей.
3. Самовывоз - 0 рублей.
Плюсом еще подключаю плагин скрытия платной доставки, если есть бесплатная и самовывоз. Все бы хорошо, но такая доставка доступна всем, кто находится в Хабаровском крае. То есть кто-то может заказать курьера и самовывоз находясь в Комсомольске, что неправильно. Средствами WooCommerce всячески пытался указать зону доставки именно город Хабаровск. Из вариантов было использовать диапазон индексов, что абсолютно не подходит. Хотелось бы для местной доставки исключить заполнение индекса и страны и прочих ненужных полей для местной доставки. Чтобы местным было все легко и просто.
Доставка в другие города и регионы России осуществляется естественно почтой. В другие города и поселки Хабаровского края подразумевается отправлять так же почтой или ТК, доставка курьером и самовывоз исключена.
В руки попал плагин WooCommerce Advanced Shipping, который работает по принципу "Условие - Результат". Он очень простой и гибкий. Получилось создать ряд местных доставок с условием, если в поле город написано Хабаровск. То же самое как и выше:
1. Доставка курьером - 300 рублей.
2. Бесплатная доставка (от 3000 рублей) - 0 рублей.
3. Самовывоз - 0 рублей.
В этом плагине существует параметр "Hide other shipping methods when free shipping is available" - спрятать другие варианты доставки, если бесплатный имеется, но он не совсем корректный. То есть представьте... Если же покупатель набирает корзину больше 3000, то для него должны быть доступны по логике "Бесплатная доставка" и "Самовывоз", но дело в том что они равны нулю и плагин считает их оба бесплатными и оставляет только один самовывоз. Я даже нашел код, который за это отвечает. В кодах я чуть понимаю, но не думаю что сам справлюсь.
Код в файле class-was-method.php :
Код:
/**
* Hide shipping.
*
* Hide Shipping methods when regular or
* advanced shipping free shipping is available.
*
* @since 1.0.0
* @since 1.0.7 - Show all free shipping rates
*
* @param array $available_methods
* @return array
*/
public function hide_all_shipping_when_free_is_available( $available_methods ) {
if ( 'no' == $this->hide_shipping ) :
return $available_methods;
endif;
$shipping_costs = wp_list_pluck( (array) $available_methods, 'cost' );
if ( in_array( 0, $shipping_costs ) ) :
foreach ( $available_methods as $key => $method ) :
if ( 0 != $method->cost ) :
unset( $available_methods[ $key ] );
endif;
endforeach;
endif;
return $available_methods;
}
Если у кого-то будет интерес к такому решению и желание разобраться, то буду рад. Альтернативных решений найти у меня не удалось. Существует еще свежее версия этого плагина от продавца sormano.
Благодарю за внимание. Надеюсь правильно изложил здесь всю логику.