2
votes

I was wondering if it was possible to make the coupon field mandatory on WooCommerce.

I know that this is possible using functions, however this is slightly above my current skill level so I was wondering if you could give me a step-by-step version of how to accomplish this. Any answer would be much appreciated.

3

3 Answers

2
votes

I don't know about the function but you can modify the plugin to achieve this in following manner :

Make one folder in your theme folder woocommerce and in new created woocommerce folder, create another folder with checkout name.

So now it will look something like wp-content > themes > your-theme > woocommerce > checkout.

Now go to your plugin directory and follow below path :

wp-content > plugins > woocommerce > templates > checkout

When you go in above path, you will find one file named as form-coupon.php. Copy that file and paste it to the directory which we created at top of that answer.

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

Now its time to modify the code in wp-content > themes > your-theme > woocommerce > checkout > form-coupon.php :

Find following code line in above mentioned file :

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

And replace above line with

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

Note: Here I have added required attribute of html.

Tell me if you have any doubt.

UPDATED:

    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.");
            }
        }
    }

Please give it a try and let me know feedback.

NOTE: UNTESTED

1
votes

to solve the problem try this code:

    <?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' );
            }
        }
    }
?>

in functions.php instead of the one above...

for me it works

0
votes

Add the following code in functions.php

Require Coupon for Single Product

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

Replace 37 by the your product ID in $targeted_ids = array(37); you can have multiple product IDs like $targeted_ids = array(37,48,12);

Replace "summer2" by any other coupon code in $coupon_code = 'summer2'; Don't forget to add this coupon code in WooCommerce before using it.


Require coupon for all products

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

Replace $product_categories = array( 'clothing' ); by any other category name or category ID.