Іноді, коли ви оновлюєте Magento, вона може змінити необхідні параметри областей (state parameters) та задати якісь обов’язкові області для кількох країн у Stores > Configuration > General. Більше того, цю опцію могли оновити ваші колеги або ви самі.

Magento State Options

Якщо у вас є магазин Magento 2, у вас є користувачі, які вже задавали адреси доставки та оплати під час здійснення покупки. Їхні адреси, збережені у вашому магазині, вже включають країну, але не мають заданих областей (регіонів). Крім того, іноді область задається як текстове поле (а не select box).

Коли ви оновлюєте Magento, вона змінює обов'язкові області (required states) або ви задаєте їх для ряду країн самостійно.Таким чином, області будуть обов'язковими для задавання, навіть якщо у вашого користувача вже задано адресу з параметрами країни.

Які у цьому недоліки?

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

Це не дуже зручно, оскільки вимагає більше часу ніж є у ваших користувачів. Вони можуть просто піти, не купивши нічого, чого не захотів би жоден власник магазину.

Чи є якесь рішення?

Ми рекомендуємо просто видалити ці адреси, щоб коли ваші користувачі захочуть щось повторно купити, вони не стикались з труднощами, а просто знову ввели свої адреси.

Однак, з іншого боку, видаляти адреси для кожного окремого користувача не дуже ефективно. Тож, ми маємо для вас рішення.

Виконайте наступний SQL запит :

SELECT value FROM core_config_data WHERE path LIKE 'general/region/state_required'

Ви отримаєте коди країн розділені комами, так як у прикладі:

AU,BG,BR,CA,CH,CN,CO,EE,ES,HR,IN,IT,LT,LV,MX,PL,RO,US,UY

Далі, вам потрібно конвертувати їх у коди країн у лапках, також розділені комами:

'AU','BG','BR','CA','CH','CN','CO','EE','ES','HR','IN','IT','LT','LV','MX','PL','RO','US','UY'

Після того як ви отримаєте коди країн у лапках, вам потрібно буде виконати ще 3 запити.

У першому, вам потрібно використовувати коди країн, які ви раніше отримали:

DELETE FROM customer_address_entity WHERE country_id IN ('AU','BG','BR','CA','CH','CN','CO','EE','ES','HR','IN','IT','LT','LV','MX','PL','RO','US','UY') AND region IS NULL or region_id is NULL;
UPDATE customer_entity SET default_billing = null WHERE default_billing IS NOT NULL AND default_billing NOT IN (SELECT entity_id from customer_address_entity);
UPDATE customer_entity SET default_shipping = null WHERE default_shipping IS NOT NULL AND default_shipping NOT IN (SELECT entity_id from customer_address_entity);

Ці SQL запити видалять недійсні адреси доставки та оплати, тому у подальшому у вас не виникне проблем із обов'язковими областями.

Перегляньте більше цікавих статей по розробці Magento у категорії pозробка під Magento 2 !