Автоматическое применение / удаление кода купона на основе товаров в корзине в Woocommerce

Я хотел применить код купона к корзине, если в корзине минимум 2 товара. если нет, то купон не будет применяться и отобразить сообщение об изменении, а если применить, тогда будет отображаться сообщение об успешном завершении, вот мой код, который я пробовал, не работает, как я хочу

add_action( 'woocommerce_before_calculate_totals','conditionally_auto_add_coupon', 30, 1 );

function conditionally_auto_add_coupon( $cart ) {

    if ( is_admin() && !defined('DOING_AJAX') ) return; // Exit

    // HERE set the coupon code (in lowercase)
    $coupon_code = 'mycode';

    $total_item = 0;

    if (WC()->cart->has_discount('mycode')) {

        foreach( $cart->get_cart() as $cart_item ){
          $total_item++;
        }
        if($total_item < 2){
            $cart->remove_coupon( $coupon_code );

            wc_add_notice( __('you have only 1 item in cart'), 'alert');
        }
        else{
            $cart->add_discount( $coupon_code );

            wc_add_notice( __('coupon added'), 'notice');
        }
    }
}

Любая помощь приветствуется.


person mdkamrul    schedule 26.03.2019    source источник


Ответы (2)


Попробуйте следующее:

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

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

    $coupon_code = 'summer'; // HERE set the coupon code (in lowercase)
    $applied     = in_array( $coupon_code, $cart->get_applied_coupons() ) ? true : false;
    $item_count  = sizeof( $cart->get_cart() );
    $total_item  = 0;

    // Remove coupon
    if ( $item_count < 2 && $applied ) {
        $cart->remove_coupon( $coupon_code );
        wc_clear_notices();
        wc_add_notice( __('You have only 1 item in cart'), 'error');
    }
    // Add coupon
    elseif ( $item_count >= 2 && ! $applied ) {
        $cart->apply_coupon( $coupon_code );
        wc_clear_notices();
        wc_add_notice( __('A coupon has been added'), 'notice' );
    }
}

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

person LoicTheAztec    schedule 27.03.2019
comment
спасибо за код, но проблема в том, что я помещаю свой купон в поле купона, а в корзине только 1 товар, и купон был применен и показал мне сообщение об успешном выполнении по умолчанию, может сказать мне, что не так? - person mdkamrul; 27.03.2019
comment
@mdkamrul Этот код не предназначен для добавления купона вручную ... Он делает это сам ... Он АВТО ПРИМЕНЯЕТ или АВТО УДАЛЯЕТ код купона. (Я снова изменил ловушку на woocommerce_before_calculate_totals)… Для меня код отлично работает на моем тестовом сервере. - person LoicTheAztec; 27.03.2019
comment
Извините за недопонимание. Но на самом деле мне нужно ручное, а не автоматическое. подскажите, пожалуйста, решение для этого? - person mdkamrul; 27.03.2019
comment
На самом деле это было для ручного применения купона, а не для автоматического. также я изменил действие, как вы сказали ‹code› woocommerce_before_calculate_totals ‹/code›, но без изменений, это работает как раньше. вы можете изменить свой код, пожалуйста? - person mdkamrul; 27.03.2019

Используйте плагин "Smart Coupon For Woocommerce", реализующий автоматический купон. функциональность,

Пожалуйста, обратитесь к этому код в репозитории svn.

person Subair    schedule 08.04.2019