基于邮政编码的“选择的支付网关”拒绝WooCommerce结帐

时间:2020-06-20 03:54:15

标签: php wordpress woocommerce checkout shipping

我正在尝试仅在客户选择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.' );
    }
}

1 个答案:

答案 0 :(得分:0)

显示错误消息所要满足的条件:(解释已添加为代码中的注释)

  • 必须选择本地接送。
  • 邮政编码区域中不得存在邮政编码邮政编码
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 );
相关问题