Сделать поле купона обязательным в WooCommerce

Мне было интересно, можно ли сделать поле купона обязательным в WooCommerce.

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


person Lukas_T    schedule 17.12.2014    source источник


Ответы (3)


Я не знаю о функции, но вы можете изменить плагин, чтобы добиться этого следующим образом:

Создайте одну папку в папке вашей темы woocommerce и в новой созданной папке woocommerce создайте другую папку с именем checkout.

Итак, теперь это будет выглядеть примерно так: wp-content > themes > your-theme > woocommerce > checkout.

Теперь перейдите в каталог вашего плагина и следуйте по указанному ниже пути:

wp-content > plugins > woocommerce > templates > checkout

Когда вы перейдете по указанному выше пути, вы найдете один файл с именем form-coupon.php. Скопируйте этот файл и вставьте его в каталог, который мы создали в верхней части этого ответа.

wp-content > themes > your-theme > woocommerce > checkout > form-coupon.php.

Теперь пришло время изменить код в wp-content > themes > your-theme > woocommerce > checkout > form-coupon.php:

Найдите следующую строку кода в вышеупомянутом файле:

<input type="text" name="coupon_code" class="input-text" placeholder="<?php _e( 'Coupon code', 'woocommerce' ); ?>" id="coupon_code" value="" />

И замените строку выше на

<input type="text" name="coupon_code" class="input-text" placeholder="<?php _e( 'Coupon code', 'woocommerce' ); ?>" id="coupon_code" value="" required/>

Примечание. Здесь я добавил атрибут required для html.

Скажи мне, если у тебя есть сомнения.

ОБНОВЛЕНО:

    add_action('woocommerce_check_cart_items', 'make_coupon_code');

    function make_coupon_code()
    {
        global $woocommerce;
        if(is_cart() || is_checkout()){
            $my_coupon = $woocommerce->cart->applied_coupons;
            echo $woocommerce->cart->get_applied_coupons;
            if(empty($my_coupon))
            {
                $woocommerce->add_error("Please enter coupon code to checkout.");
            }
        }
    }

Пожалуйста, попробуйте и дайте мне знать обратную связь.

ПРИМЕЧАНИЕ: UNTESTED

person Rohil_PHPBeginner    schedule 18.12.2014
comment
Привет! Большое спасибо за предложение. Я попробовал описанный выше метод, однако он по-прежнему позволяет мне оформить заказ без применения купона, мне нужно, чтобы покупатель не мог выполнить заказ без применения кода купона. - person Lukas_T; 18.12.2014
comment
Большое спасибо за Вашу помощь! Пожалуйста, дайте мне знать, если вы думаете о чем-то - person Lukas_T; 18.12.2014
comment
Эй, спасибо за ответ, просто чтобы убедиться, что я добавляю приведенный выше php-код в functions.php моей дочерней темы или в form-coupon.php? - person Lukas_T; 19.12.2014
comment
В файле functions.php вашей дочерней темы и, пожалуйста, дайте мне знать вывод, так как он не проверен. - person Rohil_PHPBeginner; 19.12.2014
comment
Hay, я пробовал вышеуказанный метод, он работает, но только частично. В основном заставляет вас застрять на странице корзины и не позволяет вам перейти на страницу оформления заказа. Хотя я уверен, что это будет полезно большинству других читателей здесь, мой конкретный магазин не использует функциональность корзины, вместо этого полагаясь на гиперссылки, которые ведут вас на страницу оформления заказа. Возможно ли иметь такой же эффект на самой странице оформления заказа, т.е. пользователь не может отправить заказ, если код не был введен таким же образом, если, скажем, отсутствовал почтовый индекс. Еще раз большое спасибо за вашу помощь. - person Lukas_T; 19.12.2014
comment
Попробуйте изменить оператор if следующим образом: if(is_checkout()) вместо if(is_cart() || is_checkout()). Пожалуйста, дайте мне знать результат. - person Rohil_PHPBeginner; 20.12.2014

для решения проблемы попробуйте этот код:

    <?php
 add_action('woocommerce_check_cart_items', 'make_coupon_code');

    function make_coupon_code()
    {
        global $woocommerce;
        if(is_cart() || is_checkout()){
            $my_coupon = $woocommerce->cart->applied_coupons;
            echo $woocommerce->cart->get_applied_coupons;
            if(empty($my_coupon))
            {
                wc_add_notice( '<strong>' . $btn['label'] . '</strong> ' . __( 'insert coupon code', 'woocommerce' ), 'error' );
            }
        }
    }
?>

в functions.php вместо указанного выше...

для меня это работает

person Amos    schedule 27.03.2015

Добавьте следующий код в functions.php

Требовать купон для одного продукта

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
    }
  }
}

Замените 37 на идентификатор вашего продукта в $targeted_ids = array(37);, у вас может быть несколько идентификаторов продукта, например $targeted_ids = array(37,48,12);.

Замените summer2 любым другим кодом купона в $coupon_code = 'summer2'; Не забудьте добавить этот код купона в WooCommerce перед его использованием.


Требовать купон для всех продуктов

add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_code' );
function mandatory_coupon_code() {
  $product_categories = array( 'clothing' ); // Category ID or slug of targeted category
  $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 ){
    if( has_term( $product_categories, 'product_cat', $cart_item['product_id'] ) && !$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
    }
  }
}

Замените $product_categories = array( 'clothing' ); любым другим именем категории или идентификатором категории.

person Sahil Hadke    schedule 30.10.2020