Включение бесплатной доставки в WooCommerce для определенных товаров

14 мар. 2013 г., 15:15:18
Просмотры: 24.1K
Голосов: 9

Я хотел бы узнать, возможно ли включить бесплатную доставку в WooCommerce только если определенные товары (или товары определенных категорий / классов доставки) находятся в корзине.

Опция бесплатной доставки активируется только на основе стоимости корзины или через промокод, поэтому я исследовал фиксированный тариф доставки и обнаружил, что он отдает приоритет самому дорогому классу доставки над более дешевыми. Это означает, что созданный мной класс бесплатной доставки никогда не переопределяет стандартную плату.

Я понимаю логику этого подхода, но это противоположно тому, что мне нужно, так как идея заключается в том, чтобы стимулировать покупки товаров с более высокой маржой прибыли путем исключения платы за доставку, когда они включены в заказ.

Я не знаю, возможно ли то, чего я пытаюсь достичь, в рамках WooCommerce. Купон, который применяется только к определенным товарам / категориям, кажется самым близким вариантом, но я бы предпочел не заставлять пользователей вводить код при оформлении заказа.

Кто-нибудь знает, есть ли более простые способы предоставить пользователям бесплатную доставку при покупке определенных товаров?

3
Комментарии

Как вообще этот вопрос о плагине для Wordpress, который получил 8 голосов и был добавлен в избранное 3 раза разработчиками Wordpress, мог быть закрыт как "не по теме"? O.o

Ben Ben
23 апр. 2015 г. 07:18:42

@Ben потому что это плагин WooCommerce, а не вопрос, специфичный для WordPress (как указано в центре справки)

Alexander Holsgrove Alexander Holsgrove
31 окт. 2019 г. 12:54:11

Именно на этот вопрос я наткнулся при поиске решения данной проблемы. Поэтому хочу поделиться более свежей ссылкой для посетителей. Это из официальной документации WooCommerce, и ей не 7 лет. Здесь дается ответ на вопрос с примером кода для добавления в functions.php https://woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/

Peter Højlund Andersen Peter Højlund Andersen
16 дек. 2021 г. 14:06:56
Все ответы на вопрос 6
4

Кто-нибудь знает, есть ли более простые способы предоставить бесплатную доставку для пользователей, которые покупают определенные товары?

На самом деле, при создании товара вы можете просто отметить его как Виртуальный товар прямо в редакторе товара, и это полностью исключит доставку для данного товара.

9 мая 2013 г. 19:06:00
Комментарии

Это работает для простых товаров, но не для других типов товаров — например, вариативных. Хорошая попытка, однако. Возможно, это сработает для некоторых людей.

Alexander Lee Williams Alexander Lee Williams
6 сент. 2013 г. 23:45:47

Почему это не работает для вариативных товаров? Вы можете пометить каждую вариацию как virtual.

BFTrick BFTrick
17 сент. 2013 г. 22:37:42

Согласен, @BFTrick

Nathan Nathan
18 сент. 2013 г. 21:09:28

Это также плохо, потому что система не будет иметь доступа к АДРЕСУ ДОСТАВКИ клиента, что довольно важно ;)

Kane Kane
14 апр. 2015 г. 01:37:08
0

Вот фрагмент, собранный из нескольких Gist в обсуждении на GitHub, на который ссылался @Ewout в другом ответе. Я добавил var_dump(), так что вы можете раскомментировать и проверить, что именно хотите удалить.

$available_methods — это array вида:

$available_methods as $method_id => $method

Сравнивайте с $method_id, если вам нужны более точные проверки.

// Скрываем стандартную доставку, если доступна бесплатная
add_filter( 'woocommerce_available_shipping_methods', 'wpse90835_hide_standard_shipping_when_free_is_available' );
/**
 * Скрывает вариант стандартной доставки, если доступна бесплатная
 * 
 * @param array $available_methods
 */
function wpse90835_hide_standard_shipping_when_free_is_available( $available_methods )
{
    // Разработчики!: Используйте дамп для просмотра, что можно удалить
    # var_dump( $available_methods );

    // Удаляем стандартную доставку
    if ( 
        isset( $available_methods['free_shipping'] ) 
        AND isset( $available_methods['flat_rate'] )
    )
        unset( $available_methods['flat_rate'] );


    return $available_methods;
}
6 сент. 2013 г. 23:58:27
0

Я разработал плагин для WooCommerce, который позволяет пользователям настраивать расширенные параметры бесплатной доставки. В плагине можно выбрать определенные товары для бесплатной доставки.

Вы можете найти плагин бесплатно на wordpress.org под названием WooCommerce Advanced Free Shipping

Надеюсь, это поможет.

4 мая 2014 г. 18:47:35
2

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

15 мар. 2013 г. 10:36:05
Комментарии

Спасибо. Изучив документацию по Table Rate Shipping, похоже, что этот инструмент действительно подходит для моих задач. Если мой работодатель одобрит лицензию, я сообщу, насколько он оказался полезен.

James O'Neill James O'Neill
15 мар. 2013 г. 13:00:04

Пожалуйста, не публикуйте ссылки на внешние ресурсы. Лучше приводить информацию здесь, используя ссылку в качестве источника. Если ссылка перестанет работать, ответ станет бесполезным, а мы активно боремся с устареванием ссылок. -1

kaiser kaiser
6 сент. 2013 г. 23:48:56
0

На основе кода kaiser (выше), я создал следующий код:

    /**
 *  Скрывает бесплатную доставку, когда доступна стандартная доставка
 * 
 * @param array $available_methods
 */
function mwe_hide_free_shipping_when_standard_shipping_is_available($available_methods) {

    // удаляем вариант стандартной доставки
    if (isset($available_methods['free_shipping']) AND isset( $available_methods['flat_rate'])) {
        unset($available_methods['free_shipping']);
    }

    return $available_methods;
}
add_filter('woocommerce_available_shipping_methods', 'mwe_hide_free_shipping_when_standard_shipping_is_available');

Что касается настройки WooCommerce, у меня включены как бесплатная доставка, так и фиксированная ставка в настройках доставки WooCommerce. Затем я просто создал класс доставки, указал его стоимость (например, £7.95) в настройках фиксированной ставки и просто добавил этот класс доставки к товарам, для которых хочу установить стоимость доставки £7.95.

11 янв. 2014 г. 15:16:09
0

Опция "виртуальный" уберет все расходы на доставку, но также удалит возможность доставки по адресу, отличному от адреса оплаты клиента. Это не проблема, если клиент покупает другие, не виртуальные товары, но становится проблемой, если это единственный товар в заказе.

7 мая 2014 г. 21:44:00