Как разделить форму адреса в корзине на два разных блока?
Добрый вечер!
В woocommerce очень странно реализован процесс оформления заказа, когда пользователь выбирает регион, город, вводит адрес, а потом ему только предлагает варианты доставки и в итоге он выбирает ПВЗ и адрес оказался не обязательным.
Хотелось бы разделить форму адреса на 2 раздельных блока:
1. Выбор города и региона
2. Адрес, индекс и так далее.
Покупатель сначала выбирает регион и город, потом выбирает тип доставки и если требуется вводить адрес, то в блоке под способом доставки мы попросим его ввести сам адрес.
Можно ли так сделать? Какие есть решения? Может уже кто-то видел или делал плагины для этого или функции?
Пробовал двумя способами и ничего не получилось:
1. Вставил 2 раза блок адреса на страницу оформления и в каждом из них скрыл стилями не нужные поля...
2. Пробовал функцией с помощью шорткода, тоже ничего не получилось, поля косо работают.
Спасибо
Дополнительно:
Да, это опять боль :) Одна из самых странных непоняток - почему выбор страны находится где-то в середине. Уже от этого зависят варианты доставки. А от вариантов в свою очередь зависят и поля. Но твоя задача вроде как решаема. На вскидку не вспомню как, найду- покажу. Но в любом случае можно написать свой плагин доставки, в котором управлять полями. В сети немало примеров как это делать.
А сейчас получается, я сделал скрытие полей, но логика убогая, пользователь видит форму адреса, не заполнив город не увидит способы доставки. Потом выбирает способ ПВЗ и оказывается, что адрес доставки не нужен был.
Типичная схема для США в woocommerce сделана, тк у них есть адрес для счета и адрес доставки, а в paypal ты вообще должен отправить на адрес из их профиля...
Вообщем не получается пока разделить одну форму на 2 взаимосвязанных
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Разделить checkout WooCommerce на «город/регион», затем способы доставки, затем адрес можно, но это не простая перестановка HTML. WooCommerce рассчитывает доставку на основе checkout fields и package data. Если вы физически перенесёте поля без учёта JS-обновления checkout, способы доставки могут перестать пересчитываться.
Правильная логика:
Обновление checkout:
jQuery(function ($) { $('form.checkout').on('change', 'select[name="billing_state"], input[name="billing_city"], select[name="shipping_state"], input[name="shipping_city"]', function () { $(document.body).trigger('update_checkout'); }); });jQuery(function ($) { $('form.checkout').on('change', 'select[name="billing_state"], input[name="billing_city"], select[name="shipping_state"], input[name="shipping_city"]', function () { $(document.body).trigger('update_checkout'); }); });
Поля checkout можно переупорядочить через фильтр:
add_filter('woocommerce_checkout_fields', function ($fields) { $fields['billing']['billing_city']['priority'] = 30; $fields['billing']['billing_address_1']['priority'] = 80; return $fields; });
Но если нужен полноценный двухэтапный checkout, лучше использовать готовые плагины multistep checkout или сделать кастомный шаблон checkout в дочерней теме. Для ПВЗ часто используют интеграции СДЭК/Boxberry/Яндекс Доставка, которые сами управляют выбором пункта выдачи и обязательностью адреса.
Не удаляйте address-поля полностью: некоторые платёжные системы, налоги, доставка и письма WooCommerce могут ожидать эти данные. Лучше скрывать их условно и отключать обязательность, если выбран ПВЗ.
Технически задача решаема, но сначала нужно понять, какие методы доставки стоят и какие поля им реально нужны. Без этого можно сломать расчёт доставки и оформление заказа.