Как скрыть поля доставки для самовывоза

Если вам необходимо скрыть лишние поля адреса только для определённых способов доставки (например для самовывоза), а для других оставить (например для курьерской доставки), у вас возникнет проблема с Woocommerce, просто так нельзя убрать поля адреса на странице оформления.

Если вы хоть немного знакомы с программированием я вам помогу.

Итак идея в следующем: используя ajax мы будем скрывать поля, при выборе определённого метода доставки.

Определяем поля адреса, которые нужно скрыть на странице оформления заказа

  1. На странице оформления заказа нажимаем  правой кнопкой на нужном нам варианте доставки и выбираем пункт «Посмотреть код»
  2. Нас интересует <Input radio (элемент) с нужным нам value (значением) — это варианты методов доставки, необходимо выписать те варианты доставки, при выборе которых мы будем скрывать ненужные поля.

В данном случае я хочу скрыть все поля адреса для метода доставки «Самовывоз», у нас это «local_pickup:6» и скрыть поле «индекс» со всех методов доставки, кроме «Почты России» — у нас это «free_shipping:15»

Создаём скрипт, который будет скрывать поля адреса для метода доставки Самовывоз и Почта России.

 

  1. Идём в директорию с нашей темой и находим папку с названием js — в ней содержатся скрипты для вашей темы;
  2. ваш_сайт/wp-content/ themes/ваша_тема/
    • Если ваша тема содержит папку js — создаём в этой папке файл, назовём его например —  hide_shipping_fields.js — название можете придумать своё,
    • Код написан так, что срабатывать триггер будет при каждом обновлении / событии в изменении метода / типа доставки.

в него помещаем следующий код:

!Внимание, код jQuery( function($) переработан с учётом изменений в библиотеке jQuery и Woocommerce jn 12.12.2022

  •  Если папки js в вашей теме нет — сохраните файл в корне вашей темы (ваш_сайт/wp-content/ themes/ваша_тема/), вместе с файлами header.php, footer.php и т.п.

Правильное подключение скрипта к WordPress

  • Теперь необходимо правильно подключить наш скрипт к выводу, использовать будем стандартный механизм WordPress  — wp_enqueue_script(), для этого открываем файл functions.php нашей темы и в самом конце добавляем код:

     
  • Использование функции  wp_enqueue_script()  это самый правильный и безопасный метод добавления скриптов на страницы под управлением WordPress.
  • В нашем примере мы вешаем на стандартный хук загрузчика скриптов WordPress wp_enqueue_scripts новый action — hide_fields_script (название сами придумываем), далее, на этот action (экшен) регистрируем новую одноимённую функцию,  которая вызывает стандартный процесс подключения скрипта — wp_enqueue_script ()
    • в качестве параметров передаем:
      • ‘hide_shipping_fields’ — рабочее наименование скрипта, обязательный элемент (строка в нижнем регистре)
      • get_template_directory_uri() — получаем текущее расположение нашей активной темы
      • . — «точка» говорит, что мы склеим расположение темы с чем то далее
      • «/js/hide_shipping_fields.js» — расположение нашего скрипта, включая папку js или без неё, если у вас её нет и вы сохранили файл в корне темы
      • array( ‘jquery’ ) — указываем, что перед нашим скриптом надо загрузить скрипт jquery, наш скрипт его будет использовать
      • GENERATE_VERSION, true — говорим, что надо использовать версионность скрипта

Вот и всё. таким образом мы скрываем поля адреса в зависимости от выбранного способа доставки, Самовывоз например,  без перезагрузки страницы.

 

16 комментариев к “Как скрыть поля доставки для самовывоза”

  1. Работает! Спасибо, перепробовал много вариантов. Это единственное, что реально работает.

    Ответить
  2. Здравствуйте! Я пытаюсь настроить магазин, но у меня появилась проблема с доставкой. Мне нужно скрыть те варианты доставки стоимость которые равна нулю. Или другим путём по классу доставки, для каждого класса своя настройка. Может подскажете как решить эту проблему?
    Нашел плагин «Hide Shipping Methods based on Shipping Class and Zone», но он работает только с другими плагинами доставки и не может скрывать стандартные методы доставки…

    Ответить
    • Владимир добрый день,
      не видел ваше сообщение, у вас для разных товаров разная стоимость доставки или зачем вам нулевая стоимость вообще? Опишите подробнее в чём проблема.

      Ответить
  3. Действительно, поля скрывает, но оформление заказа в этом случае будет невозможно, т.к. обязательность полей woocommerce никто не отменял …

    Ответить
  4. Ну хоть что то годное нашел. Что только не перепробовал. Поставил плагин Checkout Field Editor for WooCommerce, отключил ненужные поля, обязаловку адреса, думал уже самому скрипт написать на скрытие и тут же попалась статья. Спасибо за съэкономленное время!

    Ответить
  5. Ну хоть что то годное нашел. Что только не перепробовал. Поставил плагин Checkout Field Editor for WooCommerce, отключил ненужные поля, обязаловку адреса, думал уже самому скрипт написать на скрытие и тут же попалась статья. Спасибо за съэкономленное время!

    Ответить
  6. Настроил чтобы в определенных способах оплаты отображалось поле адреса, а в остальных случаях скрывалось. Однако при заказе цифровых товаров (подарочные сертификаты) поле адреса все равно запрашивается. Как можно исправить?

    Ответить
    • Нашел вариант)) Скрывает определенные поля если в корзине цифровые товары. Добавляем в function.php:

      add_filter( ‘woocommerce_checkout_fields’ , ‘truemisha_checkout_for_virtual_products’, 25 );
      function truemisha_checkout_for_virtual_products( $fields ) {
      $is_only_virtual = true;
      foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
      // если хотя бы один товар не виртуальный, то ничего делать не будем
      if ( ! $cart_item[‘data’]->is_virtual() ) {
      $is_only_virtual = false;
      break;
      }
      }
      if( $is_only_virtual ) {
      // отключаем поле Адрес 1
      unset( $fields[ ‘billing’ ][ ‘billing_address_1’ ] );
      // отключаем поле Адрес 2
      unset( $fields[ ‘billing’ ][ ‘billing_address_2’ ] );
      }
      return $fields;
      }

      Ответить

Оставьте комментарий

*