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

Это должно работать:

.//button[.='OK' and not(ancestor::div[contains(@style,'display:none')])
and not(ancestor::div[contains(@style,'display: none')])]

EDIT:

Более простое и эффективное выражение ниже:

//div[not(contains(@style,'display:none'))]//button[.='OK']

работает неправильно, потому что каждый кнопка имеет по крайней мере один div, который виден у его предков.

1
задан LoicTheAztec 2 March 2019 в 23:40
поделиться

1 ответ

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

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 вашего активного ребенка тема (или активная тема). Проверено и работает.

0
ответ дан LoicTheAztec 2 March 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: