Бесплатная доставка только для определённых товаров

Создать и настроить бесплатный способ доставки в WooCommerce у вас не должно составить труда, а вот как применить бесплатную доставку только к определённым товарам, да ещё и без использования кода?

Сейчас покажу, даже по шагам.

Если тем не менее у вас возникают трудности с вашим магазином WooCommerce, не беспокойтесь из-за этого, а пишите нам, я и моя команда будем рады вам помочь.

Шаг 1. Создаём класс доставки WooCommerce

Для этого переходим в настройки WooCommerce, затем Доставка > Классы доставки.

Как создать класс доставки в WooCommerce
Мы создали свой класс доставки в настройках WooCommerce.

При создании в качестве названия / ярлыка / описания можете указывать какие-то свои произвольные данные для своего удобства.

Шаг 2. Присваиваем класс доставки к нужным товарам

Это делается при редактировании конкретных товаров. Переходим в настройки товара и там в метабоксе Данные товара, во вкладке Доставка всё и происходит.

Добавление класса доставки к товару в WooCommerce
Тут мы добавляем созданный нами в первом шаге класс доставки к какому-то товару, на странице его редактирования.

Шаг 3. Настраиваем бесплатную доставку для товаров

Теперь нужно перейти настройки способа доставки «Единая ставка», для этого переходим в Настройки > Доставка > Зоны доставки, выбираем зону доставки, и в ней уже переходим в настройки способа.

настройки доставки Единая ставка WooCommerce
Так как мы хотим сделать именно бесплатную доставку, то в поле Стоимость важно указать 0, а дальше уже задаём цены для каждого существующего класса доставки отдельно.

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

  • Тип вычисления «На класс»: Стоимость + Сумма стоимости каждого класса в корзине.
  • Тип вычисления «На заказ»: Стоимость + Стоимость самого дорогого класса в корзине.

«Нет цен классов доставки» – эта та стоимость доставки, которая будет применяться, если мы не добавили товаров с классом «Беспл доставка» в корзину.

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 4

  • Сергей 4 августа 2020 #

    Да хороший способ без кода и плагинов. Мне были нужны условия для предоставления бесплатной доставки, когда клиент набирал определенные товары в корзину. Я использовал плагин Wocommerce advanced free shipping

  • Виктор 21 августа 2020 #

    Добрый день Миша! Спасибо за твои труды и особенно курс создание темы для WooCommerce. Это кладезь многих знаний и сильная подмога в работе. Но вот задача: клиент торгует аксесуарами для бассейнов, среди этих аксесуаров попадаются весьма крупные экземпляры. И вот как раз доставку этих крупных экземпляров нужно предварительно обговорить по телефону. По какому пути пошел я:

    Добавил кастомное поле к продукту теперь при добавлении администратор может отметить что это крупногабаритный тяжелый груз (знаю что у wc уже есть такой функционал) но мне споказалось что кастомный бегунок удобней для админа. Дальше я написал вот такую функию:

    function check_page_out(){
    ?>
    <?php
    	foreach( WC()->cart->get_cart() as $cart_item ){
        	$product_id = $cart_item['product_id'];
    		$meta = get_post_meta($product_id, 'lessmore_kilogram', true);
          	if($meta >= 1){
            	$profit = true;
            }else{
            	$profit = false;
    		}
    	}
     
     ?>
    	<?php if($profit == true): ?>
    		<div style="background: #2aadd7; padding: 15px; width: 100%; margin-bottom: 25px;" class="container"> 
    			<p style="color:#ffffff; margin:0">Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae nisi architecto dicta, temporibus nemo accusamus eius eveniet ipsam, similique autem illum reprehenderit consectetur doloremque cupiditate cum, cumque unde! Quos, quas. </p>
    		</div>
    	<?php endif; ?>
     
    <?php }
    add_action('woocommerce_review_order_before_payment', 'check_page_out');

    Она определяет если в корзине есть "тяжелый" товар. Если есть то выводит сообщение что товар крупногабаритный, стоимость и способ доставки нужно обговорить по телефону с менеджером. Но как быть если товаров в корзине несколько? Включая крупногабаритный. В таком случае цена доставки на мелкий товар будет не актуальной, а на крупногабаритный я не могу вносить цену так как она формируется индивидуально посое переговоров с клиентом. Тоесть вариант с классами не мой вариант. Ведь если предположить что я дополнительно создам классы для легких и тяжелых товаров, при чем цена на легкий будет 20$ а на тяжелый я не могу назначить цену. Тогда при попадании в корзину нескольких товаров будет выводится цена доставки на легкий товар. В общем вот такие задачи попадаются. Буду очень признателен если ты подскажешь в какую сторону смотреть для решения.

    • Миша 23 августа 2020 #

      Привет! 👋

      Всегда рад, когда мой сайт кому-то помогает, пожалуйста!

      В твоём коде есть момент, что условие $profit == true срабатывает только если последний товар крупногабаритный.

      Это можно обойти вот так:

      // по умолчанию устанавливаем переменную как false (товаров нет)
      $profit = false;
       
      foreach( WC()->cart->get_cart() as $cart_item ) {
      	$meta = get_post_meta( $cart_item[ 'product_id' ], 'lessmore_kilogram', true );
      	if( $meta >= 1 ){
      		$profit = true;
      		break; // выходим из цикла, мы узнали всё, что хотели
      	}
      }

      Надеюсь, что я правильно понял твою задачу 🙃

      • Виктор 27 августа 2020 #

        Привет, да Миша ты правильно понял задачу и дал прекрасное решение. Спасибо. У меня еще вопрос. Он более близок к теме статьи. Есть интернет магазин, товаров в магазине много. Некоторые клиент хочет доставлять бесплатно, некторые по обычной цене, скажем 20$ а неокторые особо габаритные по цене 50$. Если в корзине один товар с бесплатной доставкой - замечательно, если в корзине один товар с доставкой 50$ тоже хорошо тоже касается 20$. Но как только в корзине оказывается несколько товаров с разными классами возникает проблемма.

        Например в корзину упало два товара один с бесплатной доставкой, а второй с доставкой 50$. Как быть? Ведь на странице оплаты у клиента появляется галочка выбора стоимости 50$ и бессплатно. Но мы не можем доставлять крупногабаритный товар бесплатно. В общем как-то я запутался. Можешь помочь разобраться?

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

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.