Автоматическое применение купона для определенного продукта на основе промежуточной суммы корзины Woocommerce - PullRequest
0 голосов
/ 02 марта 2019

Ссылаясь на этот вопрос: Программно применить купон в Woocommerce , а затем этот: Как применить автоматическую скидку в WooCommerce на основе общей суммы корзины?

Полный новичок здесь.Мне нужно автоматически применить уже существующий купон к одному конкретному товару, если промежуточная сумма других товаров в корзине составляет 40 долларов США.И мне нужно убедиться, что применение скидки не создаст петли, вынеся купон из-за падения суммы ниже порога в 40 долларов.

Я не уверен, как изменить этот код, чтобы сделать это:

add_action('woocommerce_before_checkout_process','add_discount_at_checkout');

function add_discount_at_checkout(){
global $woocommerce;
$minorder = 99;
if( $woocommerce->cart->get_cart()->cart_contents_total>$minorder){

 //APPLY COUPON HERE

}
}


1 Ответ

0 голосов
/ 02 марта 2019

Сначала код целевого купона должен быть установлен как ограниченный только для целевого продукта:

enter image description here

Следующий код будет применять определенный купон (скидка) только на определенный элемент корзины, если промежуточный итог корзины (исключая этот конкретный элемент корзины) составляет до $40:

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

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

    // Your settings
    $coupon_code      = 'summer'; // Coupon code
    $amount_threshold = 40; // Total amount threshold
    $targeted_product = 37; // Targeted product ID

    // Initializing variables
    $total_amount     = 0;
    $applied_coupons  = $cart->get_applied_coupons();
    $coupon_code      = sanitize_text_field( $coupon_code );
    $found            = false;

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ) {
        if( ! in_array( $targeted_product, array( $cart_item['product_id'], $cart_item['data']->get_id() ) ) ) {
            // Get the cart total amount (excluding the targeted product)
            $total_amount += $cart_item['line_total'] + $cart_item['line_tax'];
        } else {
            // Targeted product is found
            $found = true;
        }
    }

    // Applying coupon
    if( ! in_array($coupon_code, $applied_coupons) && $found && $total_amount >= $amount_threshold ){
        $cart->add_discount( $coupon_code );
    }
    // Removing coupon
    elseif( in_array($coupon_code, $applied_coupons) && ( $total_amount < $amount_threshold || ! $found ) ){
        $cart->remove_coupon( $coupon_code );
    }
}

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

...