Как разделить форму адреса в корзине на два разных блока?

Ссылка скопирована
1 ответ

Добрый вечер!
В woocommerce очень странно реализован процесс оформления заказа, когда пользователь выбирает регион, город, вводит адрес, а потом ему только предлагает варианты доставки и в итоге он выбирает ПВЗ и адрес оказался не обязательным.
Хотелось бы разделить форму адреса на 2 раздельных блока:
1. Выбор города и региона
2. Адрес, индекс и так далее.

Покупатель сначала выбирает регион и город, потом выбирает тип доставки и если требуется вводить адрес, то в блоке под способом доставки мы попросим его ввести сам адрес.
Можно ли так сделать? Какие есть решения? Может уже кто-то видел или делал плагины для этого или функции?
Пробовал двумя способами и ничего не получилось:
1. Вставил 2 раза блок адреса на страницу оформления и в каждом из них скрыл стилями не нужные поля...
2. Пробовал функцией с помощью шорткода, тоже ничего не получилось, поля косо работают.
Спасибо

Как разделить форму адреса в корзине на два разных блока?

Дополнительно:

Да, это опять боль :) Одна из самых странных непоняток - почему выбор страны находится где-то в середине. Уже от этого зависят варианты доставки. А от вариантов в свою очередь зависят и поля. Но твоя задача вроде как решаема. На вскидку не вспомню как, найду- покажу. Но в любом случае можно написать свой плагин доставки, в котором управлять полями. В сети немало примеров как это делать.

  • Refguser, Да, я так и сделал, но дело в том, что используются плагины доставки курьерских компаний и всего лишь нужно разделить адрес на 2 части. Чтоб уже вводить адрес доставки только если это требуется.
    А сейчас получается, я сделал скрытие полей, но логика убогая, пользователь видит форму адреса, не заполнив город не увидит способы доставки. Потом выбирает способ ПВЗ и оказывается, что адрес доставки не нужен был.
    Типичная схема для США в woocommerce сделана, тк у них есть адрес для счета и адрес доставки, а в paypal ты вообще должен отправить на адрес из их профиля...
    Вообщем не получается пока разделить одну форму на 2 взаимосвязанных
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Редакция DevOps Ответ

    Разделить checkout WooCommerce на «город/регион», затем способы доставки, затем адрес можно, но это не простая перестановка HTML. WooCommerce рассчитывает доставку на основе checkout fields и package data. Если вы физически перенесёте поля без учёта JS-обновления checkout, способы доставки могут перестать пересчитываться.

    Правильная логика:

    1. Оставить country/state/city в верхнем блоке.
    2. После их изменения запускать обновление checkout.
    3. Показывать shipping methods.
    4. Поля address/index показывать условно, только если выбранная доставка требует адрес.

    Обновление 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;
    });

    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 могут ожидать эти данные. Лучше скрывать их условно и отключать обязательность, если выбран ПВЗ.

    Технически задача решаема, но сначала нужно понять, какие методы доставки стоят и какие поля им реально нужны. Без этого можно сломать расчёт доставки и оформление заказа.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно