避免WooCommerce购物车中的虚拟产品和实物产品的组合

问题描述 投票:1回答:1

我一直在寻找这个问题,但似乎一直没有找到可能的解决方案。

有没有人看到任何解决方案的 如何在一个Woocommerce购物车中只允许实物或只允许虚拟产品? 可能的话,当客户试图添加一个虚拟和物理的组合时,会弹出一个通知,并不允许该组合--或确保该组合不能出现在一个购物车中。

在订单中出现组合一直导致错误。

请大家帮忙。

wordpress woocommerce cart
1个回答
2
投票

以下将避免结合物理和虚拟产品的购物车。

// Check cart items and avoid add to cart
add_filter( 'woocommerce_add_to_cart_validation', 'filter_wc_add_to_cart_validation', 10, 3 );
function filter_wc_add_to_cart_validation( $passed, $product_id, $quantity ) {
    $is_virtual = $is_physical = false;
    $product = wc_get_product( $product_id );

    if( $product->is_virtual() ) {
        $is_virtual = true;
    } else {
        $is_physical = true;
    }

    // Loop though cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        // Check for specific product categories
        if ( ( $cart_item['data']->is_virtual() && $is_physical )
        || ( ! $cart_item['data']->is_virtual() && $is_virtual ) ) {
            wc_add_notice( __( "You can't combine physical and virtual products together.", "woocommerce" ), 'error' );
            return false;
        }
    }

    return $passed;
}


// For security: check cart items and avoid checkout
add_action( 'woocommerce_check_cart_items', 'filter_wc_check_cart_items' );
function filter_wc_check_cart_items() {
    $cart = WC()->cart;
    $cart_items = $cart->get_cart();
    $has_virtual = $has_physical = false;

    // Loop though cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        // Check for specific product categories
        if ( $cart_item['data']->is_virtual() ) {
            $has_virtual = true;
        } else {
            $has_physical = true;
        }
    }

    if ( $has_virtual && $has_physical ) {
        // Display an error notice (and avoid checkout)
        wc_add_notice( __( "You can't combine physical and virtual products together.", "woocommerce" ), 'error' );
    }
}

代码在functions.php文件的活动的子主题(或活动主题)。经过测试和工作。

© www.soinside.com 2019 - 2024. All rights reserved.