У меня проблемы со стандартными настройками класса доставки WooCommerce. У нас есть небольшой интернет-магазин с двумя затратами на доставку. Один для продуктов, которые помещаются в почтовый ящик, а другие — нет.
Мы хотели бы установить, что если есть 2 продукта с классом доставки почтового ящика, то цена становится ценой пакета.
Теперь по умолчанию WooCommerce взимает только 1-кратный класс доставки почтовых ящиков.
Сначала вам нужно будет настроить параметры доставки, как показано на экране ниже, для метода доставки «Единый тариф» и только для одного класса доставки с именем «Почтовый ящик». (установка желаемой суммы для «Почтовый ящик» или «Нет класса доставки»):
Таким образом, некоторые из ваших продуктов будут иметь класс доставки «Почтовый ящик», а все остальные — не класс доставки. Продукты без класса доставки (Нет класса доставки) будет вашим «пакетом.
Следующий код удалит класс доставки элементов корзины, если существует более одного элемента с классом доставки «Почтовый ящик»:
// Updating cart item price
add_action( 'woocommerce_before_calculate_totals', 'change_change_shipping_class', 30, 1 );
function change_change_shipping_class( $cart ) {
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// HERE define your shipping class SLUG
$mailbox_shipping_class = 'mailbox';
$mailbox_count = 0;
// 1st cart item Loop: Counting "mailbox" shipping classes cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Set the new price
if( $cart_item['data']->get_shipping_class() == $mailbox_shipping_class ) {
$mailbox_count += $cart_item['quantity'];
}
}
// If there is more than one item we continue
if( $mailbox_count <= 1 )
return; // Exit
// 2nd cart item Loop: Reset the cart items with shipping class "mailbox"foreach ( $cart->get_cart() as $cart_item ) {
if( $cart_item['data']->get_shipping_class() == $mailbox_shipping_class ){
$cart_item['data']->set_shipping_class_id('0');
}
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Других решений пока нет …