Get the Subscription id from the Order ID

Shlomi picture Shlomi · Apr 1, 2017 · Viewed 9.3k times · Source

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

Thanks

Answer

LoicTheAztec picture LoicTheAztec · Apr 2, 2017

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