Запретить оформление заказа WooCommerce на основе почтового индекса для выбранного платежного шлюза - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь проверить массив почтовых индексов ЕСЛИ и только ЕСЛИ клиент выбирает опцию local_pickup.

У меня есть копия опции местного самовывоза (local_pickup4) под названием Home Delivery и У меня есть массив почтовых индексов.

Ожидаемый результат - получить уведомление об ошибке, если почтовый индекс не совпадает, если был выбран вариант местного самовывоза.

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 голосов
/ 20 июня 2020

Условия, которые должны быть выполнены для отображения сообщения об ошибке: (объяснение добавлено как комментарий в коде)

  • Необходимо выбрать местный самовывоз.
  • Почтовый индекс НЕ должен существовать в массив предугаданных почтовых индексов
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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...