Сначала вам нужно будет настроить параметры доставки, как показано на экране ниже, для метода доставки «Единый тариф» и только для одного класса доставки с именем «Почтовый ящик» (установка желаемых сумм для «Почтового ящика» или класса отсутствия доставки). )
Таким образом, некоторые из ваших продуктов будут иметь класс доставки «Почтовый ящик», а все остальные - нет. Продукты без класса доставки (без класса доставки) будет вашей "посылкой".
Следующий код удалит класс доставки элементов корзины, если имеется более одного элемента с классом доставки «Почтовый ящик»:
// 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 вашей активной дочерней темы (или активной темы). Проверено и работает.