В вашем коде есть некоторые ошибки, такие как пропущенные аргументы, сложности и устаревшие вещи ... Вместо этого попробуйте следующее:
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'free_shipping_for_x_cart_items', 10, 3 );
function free_shipping_for_x_cart_items( $is_available, $package, $shipping_method ) {
$item_count = WC()->cart->get_cart_contents_count();
if ( $item_count == 1 ) {
$notice = __("Add one more for free shipping");
$is_available = false;
} elseif ($item_count > 1) {
$notice = __("You get free shipping");
$is_available = true;
}
if ( isset($notice) ) {
wc_add_notice( $notice, 'notice' );
}
return $is_available;
}
Этот код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Метод WC_Cart
get_cart_contents_count()
позволяет получить счетчик всех элементов (включая количество) .
Чтобы получить количество различных элементов корзины (без учета количества) , замените строку:
$item_count = WC()->cart->get_cart_contents_count();
с этим:
$item_count = sizeof($package['contents']);