Максимальная скидка по купону в WooCommerce

На основе "Исправить максимальную скидку по купону Процент корзины в ветке ответов WooCommerce" я использую следующий код в файле function.php моей активной темы:

add_action('woocommerce_coupon_options_usage_limit', 'woocommerce_coupon_options_usage_limit', 10, 2);
function woocommerce_coupon_options_usage_limit($coupon_id, $coupon) {
    echo '<div class="options_group">';
    // max discount per coupons
    $max_discount = get_post_meta($coupon_id, '_max_discount', true);
    woocommerce_wp_text_input(array(
        'id'                => 'max_discount',
        'label'             => __('Usage max discount', 'woocommerce'),
        'placeholder'       => esc_attr__('Unlimited discount', 'woocommerce'),
        'description'       => __('The maximum discount this coupon can give.', 'woocommerce'),
        'type'              => 'number',
        'desc_tip'          => true,
        'class'             => 'short',
        'custom_attributes' => array(
            'step' => 1,
            'min'  => 0,
        ),
        'value'             => $max_discount ? $max_discount : '',
    ));
    echo '</div>';
}

add_action('woocommerce_coupon_options_save', 'woocommerce_coupon_options_save', 10, 2);
function woocommerce_coupon_options_save($coupon_id, $coupon){
    update_post_meta($coupon_id, '_max_discount', wc_format_decimal($_POST['max_discount']));
}

add_filter('woocommerce_coupon_get_discount_amount', 'woocommerce_coupon_get_discount_amount', 20, 5);
function woocommerce_coupon_get_discount_amount($discount, $discounting_amount, $cart_item, $single, $coupon){
    $max_discount = get_post_meta($coupon->get_id(), '_max_discount', true);

    if (isset($max_discount) && is_numeric($max_discount) && ($max_discount > 0) && !is_null($cart_item) && WC()->cart->subtotal_ex_tax) {
        if($discount > $max_discount) {
            $discount = $max_discount;
        }
    }
    return $discount;
}

Но этот код активен только для одного товара в корзине и не работает для нескольких товаров в корзине.

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

Любой трек приветствуется.


person arsalan    schedule 14.04.2019    source источник
comment
Код ответа, где вы взяли код, не работает и был сильно искажен из этой исходной темы: WooCommerce установил максимальную скидку по купону… Как видите, за этот ответ проголосовали отрицательно и его следует удалить… Вместо этого возьмите исходный код с сайта reigelgallarde.me.   -  person LoicTheAztec    schedule 15.04.2019
comment
я тестирую исходный код, но если у нас есть одно КОЛИЧЕСТВО каждого ПРОДУКТА, например: ПРОДУКТ A КОЛИЧЕСТВО 1 ПРОДУКТ b КОЛИЧЕСТВО 1 исходный код работает хорошо, когда мы меняем КОЛИЧЕСТВО каждого ПРОДУКТА, например: ПРОДУКТ a КОЛИЧЕСТВО 2 ПРОДУКТ b КОЛИЧЕСТВО 1 исходный код Не работает работает и отображает неверный результат в купоне на скидку   -  person arsalan    schedule 15.04.2019
comment
В Woocommerce 3.2 (или 3.3) были внесены большие изменения в скидки по купонам в корзине и заказах, поэтому почти все связанные коды ответов, которые были опубликованы ранее, не работают.   -  person LoicTheAztec    schedule 15.04.2019