Отключение способов доставки если в корзине есть определенные товары
Всем привет.
Пробую дописать/переписать имеющийся код для отключения способов доставки, если в корзине есть определенные товары, которые могут быть из разных категорий. Нашла вот такой код, который отключает доставку, если есть товар из определенной категории. Буду рада любой помощи в решении этого вопроса :)
function hide_shipping_count_based( $rates, $package ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
// Count line items
$count = count( $package['contents'] );
// Set variable
$found = false;
// Set term (category)
$term = 'pizza';
// Check count
if( $count >= 1 ) {
// Loop through line items
foreach( $package['contents'] as $line_item ) {
// Get product id
$product_id = $line_item['product_id'];
// Check for category
if ( has_term( $term, 'product_cat', $product_id ) ) {
$found = true;
break;
}
}
}
// True
if ( $found ) {
// Loop trough rates
foreach ( $rates as $rate_key => $rate ) {
// Targeting
if ( in_array( $rate->method_id, array( 'shipping_method_0_local_pickup21', 'shipping_method_0_local_pickup20', 'shipping_method_0_local_pickup22' ) ) ) {
unset( $rates[$rate_key] );
}
}
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_count_based', 100, 2 );
Ответы (1 шт):
Автор решения: Darth KYL
→ Ссылка
вы можете изменить условие по которому определяете находится ли необходимый товар в корзине. Допустим у вас есть массив в котором вы храните id товаров
$product_ids = [1,2,3,4]; // значение массива замените на свои
После того как вы определили свой массив вы можете проверить есть ли какой то из товаров в корзине
foreach ( $package['contents'] as $line_item ) {
if ( in_array( $line_item['product_id'], $product_ids ) ) {
$found = true;
break;
}
}