Я пытаюсь удалить способ доставки на основе двух параметров в моей корзине. Параметр 1 = идентификатор продукта Параметр 2 = добавленное количество для этого идентификатора продукта.
Я искал и комбинировал различные решения, однако использование приведенного ниже фрагмента по-прежнему не дает мне правильного результата. Ожидаемый результат будет заключаться в том, что если какой-либо из продуктов ( 6 , 9 , 69 , 71 ) будет добавлен в мою корзину 52 раза, плата за доставку (flexible_shipping_2_1) должна исчезнуть.
Все предложения будут оценены.
add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods', 10, 2 );
function specific_products_shipping_methods( $rates, $package ) {
$product_ids = array( 6 , 9, 69 , 71 ); // HERE set the product IDs in the array
$method_id = 'flexible_shipping_2_1'; // HERE set the shipping method ID
$found = false;
// Loop through cart items Checking for defined product IDs
foreach( WC()->cart->get_cart_contents() as $cart_item_key => $cart_item ) {
if ( in_array( $cart_item['product_id'], $product_ids ) && $cart_item['quantity'] == 52){
$found = true;
break;
}
}
if ( $found )
unset( $rates[$method_id] );
return $rates;
}
Возможно, это то, что вы хотели бы (чтобы получить совокупное количество для всех определенных идентификаторов продуктов):
add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods', 10, 2 );
function specific_products_shipping_methods( $rates, $package ) {
$product_ids = array( 6 , 9, 69 , 71 ); // HERE set the product IDs in the array
$method_id = 'flexible_shipping_2_1'; // HERE set the shipping method ID
$quantity = 0;
// Get cart items for the current shipping package
foreach( $package['contents'] as $cart_item ) {
if ( in_array( $cart_item['product_id'], $product_ids ) ){
$quantity += $cart_item['quantity'];
}
}
if ( $quantity >= 52 && isset($rates[$method_id]) ) {
unset($rates[$method_id]);
}
return $rates;
}
Не забудьте очистить корзину, чтобы обновить кешированные данные о доставке…
Проверено и НЕ работает. Пожалуйста обновите.
Привет, LoicTheAztec, спасибо за вашу поддержку и мудрость в этом вопросе, это действительно помогло мне.