Обновлено Существует несколько способов сделать это без необходимости использования jQuery:
1) Если у вас мало продуктов , вы можете использовать следующий код, который вы определите:
- Массив идентификаторов продуктов
- Ваши идентификаторы экземпляров методов доставки будут удалены
код:
add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods', 10, 2 );
function specific_products_shipping_methods( $rates, $package ) {
// HERE set the product IDs in the array
$product_ids = array( 113, 115, 126 );
// HERE set the shipping methods to be removed (like "fat_rate:5")
$method_instances_ids = array('2846', '2851');
$found = false;
// Loop through cart items checking for defined product IDs
foreach( $package['contents'] as $cart_item ) {
if ( in_array( $cart_item['product_id'], $product_ids ) ){
$found = true;
break;
}
}
if ( ! $found ) return $rates; // If not found we exit
// Loop through your active shipping methods
foreach( $rates as $rate_id => $rate ) {
// Remove all other shipping methods other than your defined shipping method
if ( in_array( $rate_id, $method_instances_ids ) ){
unset( $rates[$rate_id] );
}
}
return $rates;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Протестировано и работает.
2) Если у вас есть набор продуктов , лучше ориентировать эти продукты на категорию продуктов (или метку продукта) ... Вы можете назначить ее в большом количестве.
В коде вы определите:
- Категория продукта (или тег продукта с таксономией
product_tag
)
- Ваши идентификаторы экземпляров методов доставки будут удалены
код:
add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods', 10, 2 );
function specific_products_shipping_methods( $rates, $package ) {
// HERE set the product category in the array (ID, slug or name)
$terms = array( 'my-category' );
$taxonomy = 'product_cat';
// HERE set the shipping methods to be removed (like "fat_rate:5")
$method_instances_ids = array('2846', '2851');
$found = false;
// Loop through cart items checking for defined product IDs
foreach( $package['contents'] as $cart_item ) {
if ( has_term( $terms, $taxonomy, $cart_item['product_id'] ) ){
$found = true;
break;
}
}
if ( ! $found ) return $rates; // If not found we exit
// Loop through your active shipping methods
foreach( $rates as $rate_id => $rate ) {
// Remove all other shipping methods other than your defined shipping method
if ( in_array( $rate_id, $method_instances_ids ) ){
unset( $rates[$rate_id] );
}
}
return $rates;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Чтобы все заработало для тегов товара :
Вы просто замените таксономию 'product_cat'
на 'product_tag'
3) Если у вас есть набор продуктов , вы также можете создать класс доставки и массово назначить его своим продуктам. Вам нужно будет установить цену за нее в соответствующих методах доставки…
Фильтр Способ доставки на основе класса доставки в Woocommerce 3
Вам необходимо обновить кэши доставки:
1) Сначала этот код уже сохранен в вашем файле function.php и очистите вашу корзину…
2) В настройках доставки войдите в зону доставки и отключите способ доставки и «сохранить». Затем снова включите Способ доставки и нажмите «Сохранить». Готово.