I have a WooCommerce website and when customer add-to-cart a product, it is get redirected to checkout page, so cart page is not accessible.
I would like to apply coupon via URL (GET
) on checkout page, with something like https://example.com/?coupon_code=highfive
.
When customer click this URL then the coupon code is stored in browser sessions. Then if he add-to-cart any product then the coupon is applied into checkout page.
Is this possible?
Advertisement
Answer
Update 3: This can be done in a very simple way with the following 2 hooked functions:
- The first one will catch the coupon code in the Url and will set it in WC_Sessions.
- The second one will apply the coupon code from session in checkout page.
Here is this code:
add_action('init', 'get_custom_coupon_code_to_session'); function get_custom_coupon_code_to_session(){ if( isset($_GET['coupon_code']) ){ // Ensure that customer session is started if( isset(WC()->session) && ! WC()->session->has_session() ) WC()->session->set_customer_session_cookie(true); // Check and register coupon code in a custom session variable $coupon_code = WC()->session->get('coupon_code'); if(empty($coupon_code)){ $coupon_code = esc_attr( $_GET['coupon_code'] ); WC()->session->set( 'coupon_code', $coupon_code ); // Set the coupon code in session } } } add_action( 'woocommerce_before_checkout_form', 'add_discout_to_checkout', 10, 0 ); function add_discout_to_checkout( ) { // Set coupon code $coupon_code = WC()->session->get('coupon_code'); if ( ! empty( $coupon_code ) && ! WC()->cart->has_discount( $coupon_code ) ){ WC()->cart->add_discount( $coupon_code ); // apply the coupon discount WC()->session->__unset('coupon_code'); // remove coupon code from session } }
Code goes in function.php file of the active child theme (or active theme). Tested and works
Inspired from this answer code, Lukasz Wiktor has published a plugin: Woo Coupon URL