Не взимайте плату за обработку, если в корзине есть только виртуальные товары

На сайте WooCommerce я пытаюсь выяснить, как прекратить добавлять плату за обработку, если в корзине есть только виртуальные продукты. Они продают как виртуальные подарочные сертификаты, так и физические товары, поэтому в случае, если в корзине есть физические товары с продуктом виртуального подарочного сертификата, им все равно придется взимать плату за обработку. Но если, скажем, клиент имеет только виртуальный подарочный сертификат в своей корзине, с него не будет взиматься плата за обработку.

Вот что у меня есть в их functions.php как действие по добавлению обработки. Я просто не знаю, что положить туда, чтобы проверить только виртуальные продукты в корзине.

/* Add handling fee of $3 to cart at checkout */
add_action( 'woocommerce_cart_calculate_fees','handling_fee' );
function handling_fee() {
global $woocommerce;

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

$fee = 3.00;
$woocommerce->cart->add_fee( 'Handling', $fee, false, 'standard' );
}

0

Решение

Я понял. Вот код, который работал.

/* Add handling fee of $3 to cart at checkout */
add_action( 'woocommerce_cart_calculate_fees','handling_fee' );
function handling_fee() {
global $woocommerce;

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

// First test if all products are virtual. Only add fee if at least one product is physical.
$allproductsvirtual = true;
$fee = 0;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values) {

$product = $values['data'];

if( !$product->is_virtual() ){
$allproductsvirtual = false;
}
}
if ( !$allproductsvirtual ) {
$fee = 3.00;
}
$woocommerce->cart->add_fee( 'Handling', $fee, false, 'standard' );
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector