Скидка на корзину в зависимости от конкретного варианта товара в Woocommerce - PullRequest
0 голосов
/ 31 августа 2018

У меня в магазине DIY DIY есть продукт под названием «Многоразовые мокрая», которые бывают разных моделей и разных упаковок.

  • 5 Многоразовая влажная стоимость € 10
  • 10 Многоразовая влажная стоимость € 18

Поскольку у них много разных шаблонов, клиент может захотеть 10 мокрых, но взять две разные упаковки по 5, чтобы получить два разных шаблона. К сожалению, это будет стоить ему еще 2 евро, и я хочу избежать этой ситуации.

Как я могу обнаружить это поведение, а точнее, где я должен это перехватить?

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

Любые предложения помогут мне.

1 Ответ

0 голосов
/ 01 сентября 2018

Похоже, что ваш продукт с именем «Многоразовый мокрый» является переменным продуктом с несколькими вариациями в зависимости от некоторых атрибутов продукта.

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

Но сначала вам нужно будет определить атрибут соответствующего продукта SLUG , который входит в набор количеств многоразового использования, и соответствующий термин NAME значение для «пакета из 5» в коде.

Если эти настройки выполнены неправильно, код не будет работать.

1) Изменение связанных цен товара (лучший способ) :

Здесь мы устанавливаем цену за единицу со скидкой 9 (18 / 2 = 9) , если в корзине 2 или более соответствующих товара.

add_action( 'woocommerce_before_calculate_totals', 'conditionally_set_discounted_price', 30, 1 );
function conditionally_set_discounted_price( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // HERE your product attribute slug for "Reusable wet" (without "pa_")
    $product_attr = 'reusable-wet';
    $product_attr = 'color';

    // HERE set the corresponding (value) term NAME for "5 Reusable wet"
    $term_slug = '5 reusable wet';
    $term_slug = 'Black';

    // HERE set the discounted price for each cart item with "5 Reusable wet" when they are 2 or more
    $discounted_price = 9; // (18 / 2 = 9)

    $five_rw_count = 0; // Initializing variable

    // 1st Loop: count cart items with "5 Reusable wet"
    foreach ( $cart->get_cart() as $cart_item ){
        if( $cart_item['data']->get_attribute( $product_attr ) == $term_slug ){
            $five_rw_count += $cart_item['quantity'];
        }
    }

    // Continue if there is at least 2 units of "5 Reusable wet"
    if( $five_rw_count < 2 ) return; // Exit

    // 2nd Loop: set the discounted price for cart items with "5 Reusable wet"
    foreach ( $cart->get_cart() as $cart_item ){
        if( $cart_item['data']->get_attribute( $product_attr ) == $term_slug ){
            $cart_item['data']->set_price($discounted_price); // Set the discounted price
        }
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает


2) Купонный способ (не очень удобно по многим логическим причинам) :

Здесь вам нужно будет установить код купона. Настройки этого купона должны быть такими:

enter image description here

Где вы будете устанавливать все связанные варианты продуктов в поле "продукты".

После этого вы установите название купона (в нижнем регистре) в следующем коде:

add_action( 'woocommerce_before_calculate_totals', 'conditionally_auto_add_coupon', 30, 1 );
function conditionally_auto_add_coupon( $cart ) {
    if ( is_admin() && !defined('DOING_AJAX') ) return; // Exit

    // HERE your product attribute slug for "Reusable wet" (without "pa_")
    $product_attr = 'reusable-wet';

    // HERE set the corresponding (value) term NAME for "5 Reusable wet"
    $term_slug = '5 reusable wet';

    // HERE set the coupon code (in lowercase)
    $coupon_code = 'multiplefive';

    $five_rw_count = 0; // Initializing variable

    // 1st Loop: count cart items with "5 Reusable wet"
    foreach ( $cart->get_cart() as $cart_item ){
        if( $cart_item['data']->get_attribute( $product_attr ) == $term_slug ){
            $five_rw_count++; // Increasing count
        }
    }

    // Apply the coupon if there is at least 2 units of "5 Reusable wet"
    if ( ! $cart->has_discount( $coupon_code ) && $five_rw_count >= 2 ) {
        $cart->add_discount( $coupon_code );  
    } 
    // Remove the coupon if there is at less than 2 units of "5 Reusable wet"
    elseif  ( $cart->has_discount( $coupon_code ) && $five_rw_count < 2 ) {
        $cart->remove_coupon( $coupon_code );
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает


Related: Автоматическое применение или удаление купона в корзине Woocommerce для определенного идентификатора продукта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...