Что я делаю: Я создаю промо-акцию на основе купонов. Купон предоставит скидку 10% на самый дорогой товар в корзине, который относится к определенной c категории продукта.
Проблема: Код ниже успешно проверяет, есть ли в корзине товары из указанной категории c и получает 10% от цены самого дорогого продукта из этого массива для использования в качестве скидки. Однако я не могу изменить сумму купонной скидки в корзине.
Код:
function change_coupon_price_for_promo( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ){
return;
}
// coupon code
$coupon_name = 'MYCOUPONNAME';
// if coupon is applied to cart...
if( $cart->has_discount( $coupon_name ) ) {
// Form array of products from the cart that belong to the specified category
$specProduct = array(); // array of specific products in cart
foreach ( $cart->get_cart() as $key => $cart_item ) {
$cart_item_id = $cart_item['product_id'];
$terms = wp_get_post_terms( $cart_item_id, 'product_cat' );
foreach ( $terms as $term ){
// gets product cat id
$product_cat_id = $term->term_id;
// gets an array of all parent category levels
$product_parent_categories_all_hierachy = get_ancestors( $product_cat_id, 'product_cat' );
// This cuts the array and extracts the last set in the array
$last_parent_cat = array_slice($product_parent_categories_all_hierachy, -1, 1, true);
if(in_array(3831, $last_parent_cat)){
$specProduct[$key] = $cart_item_id;
break;
}
}
}
//if there are items from the specific category in the cart
if(!empty($specProduct)){
$specPriceArray = array(); // array of specific product prices in cart
foreach ($specProduct as $key => $specItem) {
$thisProd = wc_get_product($specItem);
$thisPrice = $thisProd->get_price();
$specPriceArray[$key] = $thisPrice;
}
// most expensive specific product price
$highestSpec = max($specPriceArray);
// discount of most expensive item
$finalDiscount = $highestSpec * .1;
// print_r($specProduct); GOOD
// print_r($specPriceArray); GOOD
// echo $highestSpec; GOOD
// echo $finalDiscount; GOOD
/***** APPLY COUPON CHANGE HERE<-------HOW??? *****/
$cart->discount_total = $finalDiscount;
}
}
}
add_action( 'woocommerce_before_calculate_totals', 'change_coupon_price_for_promo', 10, 1 );
Я спрашиваю:
Последняя строка кода перед закрывающими скобками ...
$ cart-> Discount_total = $ finalDiscount;
- это то, что я пытался использовать, чтобы изменить скидку по купону в корзине. Не работает. Как я могу сделать это sh? TY.
EDIT: Я должен отметить, что добавляемый купон настроен как «Фиксированная скидка корзины» со ставкой 0, поэтому он добавляется как позиция в заказ . Таким образом, пользователь увидит скидку по коду купона в отдельной строке корзины / кассы.