WooCommerce Subscriptions - Get related orders Ids for a specific subscription

后端 未结 1 1248

Is there woocommerce function that will return me all related orders (at least the order ID) for the specific subscription that user has bough?

I have found in thi

1条回答
  •  失恋的感觉
    2021-01-17 14:34

    Updated: Added WooCommerce version 3+ Compatibility

    It's very easy to get the order ID from subscription object. I am going to select, just like you, all subscriptions where 'post status' = 'wc-active' from post table.

    // Get all customers subscriptions
    $customer_subscriptions = get_posts( array(
        'numberposts' => -1,
        // 'meta_key'    => '_customer_user',
        // 'meta_value'  => get_current_user_id(), // Or $user_id
        'post_type'   => 'shop_subscription', // WC orders post type
        'post_status' => 'wc-active' // Only orders with status "completed"
    ) );
    
    // Iterating through each post subscription object
    foreach( $customer_subscriptions as $customer_subscription ){
        // The subscription ID
        $subscription_id = $customer_subscription->ID
    
        // IMPORTANT HERE: Get an instance of the WC_Subscription Object
        $subscription = new WC_Subscription( $subscription_id );
        // Or also you can use
        // wc_get_order( $subscription_id ); 
    
        // Getting the related Order ID (added WC 3+ comaptibility)
        $order_id = method_exists( $subscription, 'get_parent_id' ) ? $subscription->get_parent_id() : $subscription->order->id;
    
        // Getting an instance of the related WC_Order Object (added WC 3+ comaptibility)
        $order = method_exists( $subscription, 'get_parent' ) ? $subscription->get_parent() : $subscription->order;
    
        // Optional (uncomment below): Displaying the WC_Subscription object raw data
        // echo '
    ';print_r($subscription);echo '
    '; }

    You can also uncomment in the post query the 'meta_key' and 'meta_value' array lines to get the subscriptions for one customer… This code is tested and works

    The most important thing here is:

    $subscription = new WC_Subscription($customer_subscription->ID);
    

    …as you will get the WC_Subscription object in which you can apply all WC_Subscription methods without getting errors, with for example:

    $subscription = new WC_Subscription($post_id);
    $relared_orders_ids_array = $subscription->get_related_orders();
    

    0 讨论(0)
提交回复
热议问题