Як заблокувати оформлення замовлень для певних країн у WooCommerce і повідомити клієнтів, що можна придбати у фізичному магазині

Іноді інтернет-магазину потрібно повідомити клієнтів певної країни, що онлайн-замовлення для них недоступне, але товари можна придбати у фізичному магазині.

У моїй задачі потрібно було, щоб клієнти з Молдови не могли оформити замовлення онлайн, але бачили повідомлення з адресою магазину.

Щоб це працювало правильно і красиво, я реалізувала поєднання фронтенд та бекенд.

Поєднання JS + PHP дозволяє:

  1. Одразу показати користувачу повідомлення та приховати блоки checkout.

  2. Гарантувати, що замовлення не пройде, навіть якщо JavaScript вимкнений.

JS (фронтенд) — гарний UX на сторінці Checkout

Вставляємо в файл functions.php. JavaScript показує повідомлення одразу після вибору країни та ховає блоки доставки, оплати і підсумку замовлення. Користувач бачить, що оформлення онлайн неможливе, і відразу отримує адресу магазину. Cелектори можуть відрізнятися і код потрібно буде адаптувати.

add_action(‘woocommerce_after_checkout_form’, function() {
?>
<script>
jQuery(function($){
const blockedCountries = [‘MD’]; // список країн, де замовлення онлайн не доступне
const noticeHTML = `
<div class=”checkout-country-notice”>
Дякуємо за інтерес до нашої продукції!
Ви можете придбати товари у нашому магазині за адресою ХХХХ
Для деталей та консультацій звертайтеся за телефоном XXXXXXX.
</div>`;
$(‘#billing_country_field’).append(noticeHTML);
function checkCountry(){
let selectedCountry = $(‘#billing_country’).val();
if(blockedCountries.includes(selectedCountry)){
$(‘.checkout-country-notice’).show();
$(‘#order_review, #order_review_heading, #payment, #shipping_method’).hide();
} else {
$(‘.checkout-country-notice’).hide();
$(‘#order_review, #order_review_heading, #payment, #shipping_method’).show();
}
}
checkCountry();
$(‘#billing_country’).on(‘change’, checkCountry);
});
</script>
<?php
});

PHP (бекенд) — надійна перевірка на сервері

JavaScript можна обійти,  якщо він вимкнений у браузері. Тому потрібно додати серверну перевірку, яка блокує створення замовлення та показує те саме повідомлення.

add_action(‘woocommerce_checkout_process’, function(){

$blocked_countries = [‘MD’]; // список країн
$country = isset($_POST[‘billing_country’]) ? sanitize_text_field($_POST[‘billing_country’]) : ”;

if (in_array(strtoupper($country), $blocked_countries)) {
wc_add_notice(
Дякуємо за інтерес до нашої продукції!
Ви можете придбати товари у нашому магазині за адресою ХХХХ
Для деталей та консультацій звертайтеся за телефоном XXXXXXX.‘,
‘error’
);
}
});

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Прокрутка до верху