Это расширение этого вопроса: Удалить метод единой ставки доставки для определенной категории в WooCommerce 2.6 и 3 +
Использовал плагин Woo Smart Coupons для продукта Gift Card.Это ДОЛЖНО быть установлено в Variation, поскольку у нас есть несколько уровней для выбора.(это исключает виртуальные продукты) У Подарочной карты есть своя собственная категория для различения.У нас есть два варианта доставки: фиксированная ставка + местный пикап.Довольно глупо иметь варианты доставки подарочной карты, которая отправляется на Ваш почтовый ящик, поэтому я использовал следующий фрагмент, приведенный в ссылке выше:
add_filter( 'woocommerce_package_rates', 'conditional_hide_shipping_methods', 100, 2 );
function conditional_hide_shipping_methods( $rates, $package ){
// Define/replace here your correct category slug (!)
$product_category = 'coupons-gift-cards';
$prod_cat = false;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$product_id = $cart_item['product_id'];
if ( has_term( $product_category, 'product_cat', $product_id ) ){
$prod_cat = true;
}
}
$rates_arr = array();
if ( $prod_cat ) {
foreach($rates as $key => $rate) {
if ('free_shipping' === $rate->method_id || 'local_pickup' === $rate->method_id || 'local_delivery' === $rate->method_id) {
$rates_arr[ $rate_id ] = $rate;
break;
}
}
}
return !empty( $rates_arr ) ? $rates_arr : $rates;
}
Работает как шарм ... пока вы не добавитепродукт, который не из этой категории.Если кто-то решит, что ему нужна Подарочная карта и обычный продукт, то должны быть возвращены обычные варианты доставки.
РЕДАКТИРОВАТЬ: Проверенный ответ работает отлично!Если вы хотите изменить метку раскладки для предметов, подобных описанной выше ситуации, чтобы они говорили что-то вроде «Загрузить» вместо «Погрузка», добавьте эту строку после оператора IF, который проверяет, какие продукты соответствуют категориям
foreach( $rates as $rate_key => $rate ) {
//change local_pickup:1 to your shipping method
if ( 'local_pickup:1' == $rate_key){
//set the text for the label
$rates[$rate_key]->label = __( 'Download', 'woocommerce' );
}
}