How to check which coupon is applied to which product in WooCommerce?

Since we can apply different coupons to each product in an order,
Is there any method to know which coupon is applied to which product?
I’ve used $order->get_used_coupons() function but it just returns the used coupon codes only.

Please help with a solution.
Thanks.

Related posts

Leave a Reply

1 comment

  1. Example made for Woocommerce 2.5.x on June 2016 (Will not work in Woocommerce 3+)

    This example is based on compiled searches:

    function wc_my_order_coupons( $order_id ) {
        $order = new WC_Order( $order_id );
    
        // checking if order has some used coupons
        if( sizeof($order->get_used_coupons()) > 0 ) {
            foreach( $order->get_used_coupons() as $coupon_code ) {
    
                // Retrieving the coupon ID
                $post_obj = get_page_by_title($coupon_code, OBJECT, 'shop_coupon');
                $coupon_id = $post_obj->ID;
    
                // here is a list of most all data that you can use for a coupon
                $cp_discount_type = get_post_meta( $coupon_id, 'discount_type', true );
                $cp_amount = get_post_meta( $coupon_id, 'coupon_amount', true );
                $cp_indiv_use = get_post_meta( $coupon_id, 'individual_use', true );
                $cp_products = get_post_meta( $coupon_id, 'product_ids' ); 
                $cp_excl_products = get_post_meta( $coupon_id, 'exclude_product_ids' );
                $cp_usage_limit = get_post_meta( $coupon_id, 'usage_limit', true );
                $cp_expiry_date = get_post_meta( $coupon_id, 'expiry_date', true );
                $cp_apply_before_tax = get_post_meta( $coupon_id, 'apply_before_tax', true );
                $cp_free_shipping = get_post_meta( $coupon_id, 'free_shipping', true ); 
    
                // Getting the products in this order_id
                $items = $order->get_items();
                foreach ($items as $key => $item) {
                    $product_name = $item['name'];
                    $product_id = $item['product_id'];
    
                    // Example: we use product_ids authorized in the coupon $cp_products
                    if (in_array($product_id, $cp_products)) {
                        echo $product_name . 'uses the coupon: ' . $coupon->code . '<br>';
                    }
                }
            }
        }
    }
    

    References :