【问题标题】:Deny WooCommerce Checkout based on ZIP code for Choosen Payment Gateway根据选择的支付网关的邮政编码拒绝 WooCommerce 结帐
【发布时间】:2020-10-10 08:48:46
【问题描述】:

我正在尝试检查一系列邮政编码,如果并且仅当客户选择 local_pickup 选项时。

我有一个名为 Home Delivery 的本地取货选项 (local_pickup4) 的副本,并且我有邮政编码数组。

如果选择了本地取货选项,则预期结果是如果邮政编码不匹配,则会收到错误通知。

add_action('woocommerce_after_checkout_validation', 'zip_code_validator_for_local_home_delivery', 10, 2 );
function zip_code_validator_for_local_home_delivery( $data, $error ) {        

    $del_zones_array = array( 30030, 30032, 30033 );

    $chosen_shipping = WC()->session->get( 'chosen_shipping_methods' )[0];

    $chosen_shipping = explode(':', $chosen_shipping);

    if ( $chosen_shipping[0] == 'local_pickup:4' && !in_array( $data['shipping_postcode'], $del_zones_array ) ) {
        $error->add( 'validation', 'We\'re sorry, but this address is outside of our online order delivery area.<br>Please contact us for assistance or choose the local pickup option.' );
    }
}

【问题讨论】:

    标签: php wordpress woocommerce checkout shipping


    【解决方案1】:

    显示错误信息需要满足的条件:(在代码中作为注释添加的解释)

    • 必须选择本地取货。
    • 邮政编码不得存在于预定义的邮政编码数组中
    function zip_code_validator_for_local_home_delivery( $data, $error ) {        
        /* Settings */
    
        // Zones
        $del_zones_array = array( 30030, 30032, 30033 );
    
        // Shipping method
        $shipping_method = 'local_pickup:4';
    
        /* End settings */
    
        // Get chosen shipping method ID
        $chosen_shipping_method_id = WC()->session->get( 'chosen_shipping_methods' )[0];
    
        // If local pickup is the chosen shipping method && ZIP code NOT in array
        if ( $chosen_shipping_method_id == $shipping_method && !in_array( $data['shipping_postcode'], $del_zones_array ) ) {
            $error->add( 'validation', 'We\'re sorry, but this address is outside of our online order delivery area.<br>Please contact us for assistance or choose the local pickup option.' );
        }
    }
    add_action('woocommerce_after_checkout_validation', 'zip_code_validator_for_local_home_delivery', 10, 2 );
    

    【讨论】:

    • @FrancescaHulio 是的,在寻找解决方案时,您总是在附近。我认为这就是调试问题的原因。在您在代码中添加的每个步骤之后,检查变量是否实际包含(预期的)值以及 if/else 条件是否实际执行了 if/else 语句。这也是我编写代码并最终获得预期结果的方式。如果你有 10 行代码但有些东西不起作用,那是哪一行?如果在继续之前检查每个代码行之后,您会立即知道哪一行包含错误。问候
    • 非常真实。我也在学习如何做到这一点。我在 wp-config 中使用调试,我通常用谷歌搜索,试图找出通知或任何通知的内容。我通常会在一些调查后得到它,但我还不够好,无法解决所有问题。再次感谢您所做的一切。
    猜你喜欢
    • 2019-06-15
    • 2019-12-28
    • 2019-01-21
    • 2021-11-08
    • 2016-10-20
    • 2019-05-03
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多