Cart / Checkout: Auto-Apply Coupon to Scheduled Order at Checkout
This code is an example of how merchants can apply an existing Autoship Cloud Coupon to Scheduled Orders at checkout automatically.
Includes a conditional, role-based example a merchant may use to filter which customer a coupon can be applied.
Important! Always test code on a staging site before applying custom code to your production / live site.
Filters Used:
Step 1: Add a Function to Auto-Apply Coupons
A developer will first create a new filter: ' xx_autoship_auto_apply_coupon' to hook into with the examples following.
/** * The following is an example of how to apply one or more QPilot Coupons * to Scheduled Orders at Checkout which can be used as an alternative to * the recurring price and allow for more customized discounts. * * NOTE All Coupon Codes attached to Scheduled Orders at checkout must exists * in QPilot in order to be valid. */ /** * Auto-Apply a QPilot Coupon to Scheduled Orders created at checkout. * NOTE The Coupon Code used below MUST exist in QPilot and be valid for the order. * * @param array $scheduled_order_data The current QPilot Scheduled Order data. * @param int $order_id The WooCommerce Order ID. * * @return array The QPilot Scheduled Order data with the new coupon. */ function xx_auto_apply_autoship_coupon( $scheduled_order_data, $order_id ){ if ( !is_checkout() ) return $scheduled_order_data; /** * Make the Auto Apply Coupon Code filterable * @param array|string an Array of coupon codes or string of comma separated codes. * @return array|string filtered Array of coupon codes or string of comma separated codes. */ $coupon_code = apply_filters('xx_autoship_auto_apply_coupon', '', $scheduled_order_data, $order_id ); // Apply a pre-made Coupon to every scheduled order. // NOTE Coupons codes are in an array of codes if ( !empty( $coupon_code ) ){ if ( isset( $scheduled_order_data['coupons'] ) && !empty( $scheduled_order_data['coupons'] ) ){ // Get new coupons ( could be a single item or array ) $new_coupons = is_array( $coupon_code ) ? $coupon_code : explode( ',', $coupon_code ); // Add Coupons together & re-attach $scheduled_order_data['coupons'] = array_merge( $new_coupons, $scheduled_order_data['coupons'] ); } else { // Add New Coupons $scheduled_order_data['coupons'] = is_array( $coupon_code ) ? $coupon_code : explode( ',', $coupon_code ); } } return $scheduled_order_data; } add_filter( 'autoship_create_scheduled_order_data', 'xx_auto_apply_autoship_coupon', 10, 2 );
Example 1: Add Coupon to All Checkout Orders
In this example, a developer hooks into the ' xx_autoship_auto_apply_coupon' filter they created (see above), and applies the 'AutoshipDiscount' coupon they created in QPilot to all Scheduled Orders created at checkout.
/** * Adds a Qpilot Autoship coupon to all Scheduled Orders at checkout * * @param array|string $coupon_code The current coupon(s) applied. * @param array $scheduled_order_data The current QPilot Scheduled Order data. * @param int $order_id The WooCommerce Order ID. * * @return array The QPilot Scheduled Order data with the new coupon. */ function xx_apply_auto_autoship_coupon( $coupon_code, $scheduled_order_data, $order_id ){ // Add an AutoshipCouponCode coupon to all Scheduled Orders. // Coupon codes are a array of codes $new_coupons = empty( $coupon_code ) ? array() : $coupon_code; // Check for a comma separated string or array $new_coupons = is_array( $new_coupons ) ? $new_coupons : explode( ',', $new_coupons ); // Add a new code $new_coupons[]= 'AutoshipDiscount'; return $new_coupons; } add_filter( 'xx_autoship_auto_apply_coupon', 'xx_apply_auto_autoship_coupon', 9, 3 );
Example 2: Add Coupon Based on User Role
In this example, a developer hooks into the ' xx_autoship_auto_apply_coupon' filter they created (see above), and applies the 'MemberDiscount' coupon they created in QPilot to all Scheduled Orders created at checkout by Administrators.
/** * Adds a Qpilot Member coupon to Scheduled Orders at checkout when user has a Member Role. * * @param array|string $coupon_code The current coupon(s) applied. * @param array $scheduled_order_data The current QPilot Scheduled Order data. * @param int $order_id The WooCommerce Order ID. * * @return array The QPilot Scheduled Order data with the new coupon. */ function xx_apply_member_autoship_coupon( $coupon_code, $scheduled_order_data, $order_id ){ // Coupon codes are a array of codes $new_coupons = empty( $coupon_code ) ? array() : $coupon_code; // Check for a comma separated string or array $new_coupons = is_array( $new_coupons ) ? $new_coupons : explode( ',', $new_coupons ); // Check if current user is a member and if so give them the additional members coupon. $user = wp_get_current_user(); if ( $user->ID && in_array( 'administrator', (array) $user->roles ) ) { $new_coupons[]= 'MemberDiscount'; } return $new_coupons; } add_filter( 'xx_autoship_auto_apply_coupon', 'xx_apply_member_autoship_coupon', 10, 3 );
Example 3: Add Coupon Based on Order Total
In this example, a developer hooks into the ' xx_autoship_auto_apply_coupon' filter they created (see above), and applies the 'AutoshipThankYou' coupon they created in QPilot to all Scheduled Orders created at checkout when the order total exceeds $300.
/** auto apply thank you coupon for Autoship Checkout orders over $300 * @param array $scheduledOrderData Autoship Scheduled Order data * @param int $orderId WC Order Id * @return array Scheduled Order data with applied coupon * */ function apply_autoship_coupon_order_over_300($coupon_code, $scheduledOrderData, $orderId){ $order = wc_get_order($orderId); $orderTotal = $order->get_total(); // Add an AutoshipCouponCode coupon to all Scheduled Orders. // Coupon codes are a array of codes $new_coupons = empty( $coupon_code ) ? array() : $coupon_code; if($orderTotal >= 300 ){ $new_coupons[] = 'AutoshipThankYou'; } return $new_coupons; } add_filter('xx_autoship_auto_apply_coupon', 'apply_autoship_coupon_order_over_300', 10, 3);