phpwordpresswoocommerceorderswoocommerce-subscriptions

WooCommerce - Get the Subscription id from the Order ID


I'm trying to get the subscription id from the action hook woocommerce_order_status_changed.

It gives me the order id which is changed with every switch the customer makes.

For example: If the subscription id is 10, the original order id is 9.

Now every switch the customer made generates a new order id, which the action above gives you. At this point I have the $customer_id, $order_id, and the original post id which is 9,

How I can get the subscription id of the current order?


Solution

  • You can use dedicated function wcs_get_subscriptions_for_order() which will retrieve $subscription IDs.

    So this could be your code:

    add_action('woocommerce_order_status_changed', 'action_order_status_changed');
    function action_order_status_changed( $order_id ){
        $subscriptions_ids = wcs_get_subscriptions_for_order( $order_id, array( 'order_type' => 'any' ) );
        // We get all related subscriptions for this order
        foreach( $subscriptions_ids as $subscription_id => $subscription_obj )
            if($subscription_obj->order->id == $order_id) break; // Stop the loop
    
        // The subscription ID: $subscription_id 
        // The An instance of the Subscription object: $subscription_obj 
        // ...
    }