Применение скидки ко второму товару в WooCommerce: методы и примеры кода

Чтобы применить скидку ко второму товару с помощью WooCommerce, вы можете рассмотреть несколько способов. Ниже я опишу несколько подходов с примерами кода:

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

    // Add a discount to the second product in the cart
    add_action('woocommerce_before_calculate_totals', 'apply_discount_to_second_product');
    function apply_discount_to_second_product($cart) {
       if (is_admin() && !defined('DOING_AJAX')) {
           return;
       }
    
       $second_product_found = false;
       $discount_percentage = 10; // Adjust this value to set the discount percentage
    
       foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
           // Check if it is the second product
           if ($second_product_found) {
               $product = $cart_item['data'];
               $price = $product->get_price();
               $discount_amount = $price * ($discount_percentage / 100);
               $product->set_price($price - $discount_amount);
           }
    // Mark the second product as found
           $second_product_found = true;
       }
    }
  2. Использование скидки на основе продукта.
    Этот метод применяет скидку непосредственно ко второму продукту, изменяя его цену. Вы можете использовать фильтр woocommerce_product_get_price, чтобы корректировать цену продукта в зависимости от его позиции.

    // Add a discount to the second product
    add_filter('woocommerce_product_get_price', 'apply_discount_to_second_product', 10, 2);
    function apply_discount_to_second_product($price, $product) {
       global $woocommerce;
    
       if (!$woocommerce->cart || is_admin()) {
           return $price;
       }
    
       $second_product_found = false;
       $discount_percentage = 10; // Adjust this value to set the discount percentage
    
       foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) {
           // Check if it is the second product
           if ($second_product_found) {
               // Apply the discount
               $discount_amount = $price * ($discount_percentage / 100);
               $price -= $discount_amount;
           }
    // Mark the second product as found
           $second_product_found = true;
       }
    
       return $price;
    }

Не забудьте настроить переменную discount_percentageв обоих примерах, чтобы установить желаемую сумму скидки.