Разрешить покупку определенных продуктов, только если купон применяется в Woocommerce.

Я работаю над веб-сайтом woocommerce, и я пытаюсь ограничить покупку продукта только в том случае, если на него применяется купон, поэтому он не должен обрабатываться без добавления кода купона. Пользователь должен ввести код купона, чтобы иметь возможность заказать этот конкретный продукт (не для всех других продуктов).

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


person Zain Ali    schedule 11.05.2019    source источник


Ответы (1)


Для определенных продуктов следующий код не разрешит оформление заказа, если купон не применен, и будет отображаться сообщение об ошибке:

add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_for_specific_items' );
function mandatory_coupon_for_specific_items() {
    $targeted_ids   = array(37); // The targeted product ids (in this array)
    $coupon_code    = 'summer2'; // The required coupon code

    $coupon_applied = in_array( strtolower($coupon_code), WC()->cart->get_applied_coupons() );

    // Loop through cart items
    foreach(WC()->cart->get_cart() as $cart_item ) {
        // Check cart item for defined product Ids and applied coupon
        if( in_array( $cart_item['product_id'], $targeted_ids ) && ! $coupon_applied ) {
            wc_clear_notices(); // Clear all other notices

            // Avoid checkout displaying an error notice
            wc_add_notice( sprintf( 'The product"%s" requires a coupon for checkout.', $cart_item['data']->get_name() ), 'error' );
            break; // stop the loop
        }
    }
}

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

введите здесь описание изображения

И в кассе:

введите здесь описание изображения

person LoicTheAztec    schedule 11.05.2019
comment
Я добавил это в function.php, а затем создал купон для определенного продукта, но он переходит к оформлению заказа без кода купона? я делаю это неправильно? - person Zain Ali; 12.05.2019
comment
@ZainAli Я снова проверил этот код, и он отлично работает… Похоже, вы не установили правильный идентификатор продукта или код купона. - person LoicTheAztec; 12.05.2019
comment
Хорошо, еще один вопрос, это только для 1 продукта, поэтому, если я хочу применить это условие к другому продукту, мне нужно скопировать и вставить эту функцию или что? - person Zain Ali; 12.05.2019
comment
@ZainAli Нет, вы можете добавлять любые идентификаторы продуктов (целые числа) в массив, например: $targeted_ids = array(37, 52, 63); - person LoicTheAztec; 12.05.2019
comment
Хорошо, последнее, что нужно спросить, хочу ли я получить купон из того, что я добавил из woocommerce, как я могу это сделать? вместо $ coupon_code = 'summer2'; Я хочу, чтобы он нашел купон на панели. мы можем это сделать? - person Zain Ali; 14.05.2019
comment
вопрос опубликован - person Zain Ali; 15.05.2019
comment
да, я просто применял его, он работает, и это сработало, большое спасибо :) - person Zain Ali; 15.05.2019
comment
@LoicTheAztec знаете ли вы или кто-то еще, как добавить несколько кодов купонов в $coupon_code = 'summer2'; Это не работает: $coupon_code = array('test-zvojrmtg6f','test-0meujlatns'); - person Liv; 01.04.2020