Не взимайте плату за обработку, если в корзине есть только виртуальные товары - PullRequest
0 голосов
/ 18 декабря 2018

На сайте 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' );
}

1 Ответ

0 голосов
/ 18 декабря 2018

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

/* 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' );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...