【问题标题】:Validating products in cart during checkout在结帐时验证购物车中的产品
【发布时间】:2015-03-05 04:50:45
【问题描述】:

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

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

编辑

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

  • woocommerce_checkout_update_order_review
  • woocommerce_review_order_before_submit

我的意思是,我希望在输入运输详细信息并且用户按下“PLACE ORDER”按钮后执行验证。因此,首先它会验证并显示通知。但是如果再次按下PLACE ORDER按钮而不做任何更改,就会下订单!

【问题讨论】:

    标签: woocommerce


    【解决方案1】:

    这就是你要找的吗?

    将以下代码添加到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;
        }
    }
    

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

    【讨论】:

    • 谢谢。它工作得很好。但是我能问你,如果我想在用户输入收货地址后进行验证,action 会被修改吗?我的意思是我想在用户输入送货地址后进行验证。因此,在验证期间,还将获取用户输入的送货地址的国家/地区,并将与类名一起检查。有什么想法吗?
    • 没关系。找到它:woocommerce_checkout_update_order_review
    • @Rohil_PHPBeginner 虽然functions.php 可能是最容易 转储一些代码的地方,但它并不理想。 Functions.php 应该是它们/外观特定的,这样的东西应该是它自己的插件。
    • 您能告诉我如何在该循环中获取产品吗?我试过了,但它是空的:$cart_content_product['data']-&gt;post_title
    • @Rohil_PHPBeginner 我同意functions.php 是测试新代码最简单的地方之一。答案已更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2015-01-17
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多