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