如果用户选择了不可用于国际递送的产品,请禁用WooCommerce下单按钮

时间:2015-09-03 作者:Akhilesh B Chandran

在我的woocommerce网站上,我列出了可以运往印度和国际目的地的两种产品。Am分配only-india 某些产品的装运类别,以便将其标记为仅适用于印度。

现在我正在尝试在结帐页面中添加验证,以防止用户完成订单,如果他们选择了国际目的地,但有一些only-india 他们的购物车中的产品以及国际产品。

到目前为止,我尝试的是:

add_action(\'woocommerce_checkout_order_review\', \'abc_validating_international_delivery\');
add_action(\'woocommerce_update_order_review\', \'abc_validating_international_delivery\');
function abc_validating_international_delivery(){

    $has_local_products = false;
    $post_data = $_POST[\'post_data\'];

    parse_str( $post_data, $abc_array );

    if( isset($abc_array[\'ship_to_different_address\']) )
        $shipping_country = $abc_array[\'shipping_country\'];
    else
        $shipping_country = $abc_array[\'billing_country\'];

    if( !empty( $shipping_country ) )
    {
        foreach ( WC()->cart->cart_contents as $cart_content_product ) {

            $shipping_class = $cart_content_product[\'data\']->get_shipping_class();
            if($shipping_class == \'only-india\')
            {
                $has_local_products = true;
            }            
        }

        if( $has_local_products && $shipping_country != \'IN\' )  
        {
            wc_add_notice( sprintf( \'<strong>You have added some products into your cart, which will not be delivered outside India!<br>Please visit <a href="https://www.example.com/my-account/">My Account</a> page and update the shipping/billing location or <a href="https://www.example.com/cart/">review the products</a> you added in cart!</strong>\' ), \'error\' );
            return false;
        }
        else
            return true;
    }
}
当访问结帐页面并单击下订单按钮时,它第一次工作。我的意思是,假设我添加了3个国际交货可用产品和1个only-india 当我选择国外时(比如,US), 然后单击下订单按钮,它会显示通知(有时会显示两个以上的重复通知)。但如果我不做任何更改,再按下订单按钮,它只会将我带到支付网关页面。我的意思是,它似乎没有进行验证,也没有阻止我完成订单!

对改进代码有什么建议吗?请随时询问您是否需要任何澄清或解释。

非常感谢。

1 个回复
SO网友:B. Shea

因为在检查了上面的逻辑之后,我没有一个很好的答案给你(似乎没问题)。。我还注意到了其他一些事情。

add_action(\'woocommerce_update_order_review\'  ...
您是否正在使用最新的更新?我在这里看不到参考文件。woothemes。com/wc apidocs/hook文档。html或在github depo上执行该do\\u操作。

Here is the current layout 用于窗体签出上的挂钩/过滤器。php。。是否确实使用了正确的add\\u操作?(如果你注意到的话,Woocommerce的文档非常糟糕)。您还希望根据您的附加条件(装运类别/装运国家/地区)对其进行验证after 他们提交了“结帐审查”,对吗?(如果需要,可在该点拒绝并显示消息)。意思:如果他们在结帐审核页面上更新发货(新提交的发货值),会怎么样?

额外的idea 如果装运条件匹配,将不允许添加到购物车。(删除“添加到购物车”按钮,替换为短消息:“仅限印度”等),从而避免将其放在购物车的首位。或者离开按钮,当他们点击时弹出消息。(显然,只有在之前已输入装运信息的情况下,这两个选项中的任何一个才起作用)。

希望这有点帮助。。

相关推荐

Ajax Validation for reCaptcha

背景我有一个registration form 使用AJAX验证jQuery Validation Engine. 表单是使用创建的Theme My Login 和包含reCaptcha 我使用WP-reCAPTCHA.就像其他领域一样,我需要validate reCaptcha using AJAX 也就是说,不刷新整个页面。到目前为止,当验证码没有验证时,我成功地使其工作。但是when it did validate, 即,输入正确,页面刷新,但带有error message 上面说\'That re