WooCommerce: Двойная скидка на товары с купоном

#php #wordpress #woocommerce #coupon #discount

Вопрос:

Я хочу удвоить скидку на товары, поступающие в продажу, с помощью кода купона.

Например: Товар продается со скидкой 10%. Если я добавлю код купона doublediscount , я хочу удвоить эту скидку до 20%.

Скидка по купону должна быть ограничена 15%. Поэтому, если товар продается со скидкой 30%, максимальная добавленная скидка с кодом купона должна составлять 15%. В результате вы получаете скидку 45% от обычной цены (продажа дополнительная скидка).

Мой код до сих пор таков:

 add_action( 'woocommerce_before_calculate_totals', 'double_saleprice_coupon' ); function double_saleprice_coupon( $cart ) {  if ( is_admin() amp;amp; ! defined( 'DOING_AJAX' ) )  return;   global $woocommerce;  $coupon_id = 'doublediscount';   // Loop through cart items (first loop)  foreach ( $cart-gt;get_cart() as $cart_item_key =gt; $cart_item ){   // Check if product in cart is on sale  $product = $cart_item['data'];  $cart_item_regular_price = $cart_item['data']-gt;get_regular_price();  $cart_item_sale_price = $cart_item['data']-gt;get_sale_price();  $cart_item_diff = $cart_item_regular_price - $cart_item_sale_price;  $cart_item_per_cent = round( $cart_item_diff / $cart_item_regular_price * 100, 0 );   if ( $product-gt;is_on_sale() amp;amp; wc_pb_is_bundled_cart_item($cart_item) === false amp;amp; $cart_item_per_cent lt; 15 ) {  echo 'on sale';  echo $cart_item_per_cent;  }   } }  

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

Если товар в корзине имеет скидку выше 15%, я ничего не хочу делать. Таким образом, код купона doublediscount будет применяться к ним на 15%.

Я просто не знаю, как добавить/изменить скидку на товар в корзине.

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

1. о, чувак, сойдет…

Ответ №1:

Вместо этого вы можете использовать woocommerce_coupon_get_discount_amount крючок в сочетании со следующими настройками купона:

  • Правильно установите свой код купона: doublediscount
  • Тип скидки: Percentage
  • Сумма: 15

Шаги, примененные в этом ответе:

  • Только в том случае, если конкретный код купона совпадает и товар продается
  • Если товар не продается, скидка не применяется (по условию else, равному 0. Однако, если это неприменимо, вы можете просто удалить условие else)
  • Рассчитывается текущая процентная скидка на продаваемый товар. Если это меньше максимальной добавленной скидки ( 15 ), то скидка удваивается
  • Если это больше, то максимальная добавленная скидка ( 15 ) будет применена автоматически

Таким образом, вы получаете:

 function filter_woocommerce_coupon_get_discount_amount( $discount, $price_to_discount , $cart_item, $single, $coupon ) {  // Returns true when viewing the cart page amp; only apply for this coupon  if ( is_cart() || is_checkout() amp;amp; $coupon-gt;get_code() == 'doublediscount' ) {  // Get an instance of the WC_Product object  $product = $cart_item['data'];    // Is a WC product  if ( is_a( $product, 'WC_Product' ) ) {  // On sale  if ( $product-gt;is_on_sale() ) {  // Regular price  $cart_item_regular_price = $product-gt;get_regular_price();    // Sale price  $cart_item_sale_price = $product-gt;get_sale_price();    // Calculate the percentage difference  $cart_item_diff = $cart_item_regular_price - $cart_item_sale_price;  $cart_item_percentage = round( $cart_item_diff / $cart_item_regular_price * 100, 0 );    // Get maximum added discount  $max_added_discount = $coupon-gt;get_amount();    // Less than maximum added discount  if ( $cart_item_percentage lt; $max_added_discount ) {  $discount = round( ( $price_to_discount * $cart_item_percentage ) / 100, 0 );  }  } else {  $discount = 0;  }  }  }   return $discount; } add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_woocommerce_coupon_get_discount_amount', 10, 5 );