结账时在购物车中验证产品

时间:2015-03-03 13:03:27

标签: woocommerce

对于每种产品,我都添加了特定的运输类。因此,在用户将一些产品添加到他/她的购物车并继续结账之后,我想在购物车中循环产品以检查它的运输类别并且如果所有产品属于特定产品则阻止结账运输类。

关于在哪里进行循环的任何想法?我的意思是我应该修改哪个动作/钩子?

修改

我尝试了以下钩子,并提供了他提供的修改后的Rohil代码作为答案。但只有一次有效:

  • woocommerce_checkout_update_order_review
  • woocommerce_review_order_before_submit

我的意思是,我希望在输入送货详细信息后执行验证,并且用户按下" PLACE ORDER"按钮。所以一开始它会验证并显示通知。但如果再次按下PLACE ORDER按钮而不进行任何更改,则会下订单!

1 个答案:

答案 0 :(得分:2)

这是你在找什么?

将以下代码添加到new WordPress pluginsite-specific snippets plugin

add_action('woocommerce_check_cart_items', 'validate_all_cart_contents');

function validate_all_cart_contents(){
    foreach ( WC()->cart->cart_contents as $cart_content_product ) {

        $shipping_class = $cart_content_product['data']->get_shipping_class();
        if($shipping_class == 'your_shipping_class_name'):
            return true;
        else:
            wc_add_notice( sprintf( '<strong>You need to purchase products from the same shipping class</strong>' ), 'error' );
        endif;
    }
}

如果您有疑问,请告诉我。