WooCommerce WC()->cart->remove_cart_item 可以工作,但需要刷新页面才能看到该项目已被删除

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

当我点击结账页面上的“下订单”按钮时,我想重新检查我的购物车中是否有任何不应包含在订单中的产品。如果找到匹配的产品,我想从购物车中删除该产品,告诉用户该商品已被删除,并且订单不应继续。这是我的代码:

function cart_remove_retail_only_products($errors) {
    if (WC()->cart->is_empty()) {
        return;
    }

    foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        $productRetailOnly = $_product->get_meta('retail_only');

        if (!$productRetailOnly) {
            continue;
        }

        WC()->cart->remove_cart_item($cart_item_key);

        throw new Exception( __("Your are using a wholesale coupon but your cart contains a retail only product. The item has been removed from your cart.") );
    }
}
add_action('woocommerce_checkout_create_order', 'cart_remove_retail_only_products');

上述函数成功从购物车中删除匹配的产品,但这是我单击“下订单”按钮后看到的内容。

如您所见,产品“Sample Retail Only Product”仍然显示。但该产品实际上已经不存在了。如果我刷新页面,我会看到以下内容:

woocommerce hook-woocommerce
1个回答
0
投票

我意识到我的要求无法通过使用

woocommerce_checkout_create_order
来实现,所以我最终使用了这些钩子:

woocommerce_add_to_cart
- 添加到购物车时检查产品
woocommerce_applied_coupon
- 检查优惠券何时应用于购物车

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