Подписки WooCommerce – получение связанных заказов Идентификаторы для определенной подписки

Есть ли функция woocommerce, которая вернет мне все связанные заказы (по крайней мере, идентификатор заказа) для конкретной подписки, которую имеет пользователь?

Я нашел в этой официальной документации функцию подписки и ссылку на объект :

WC_Subscription::get_related_orders( $return_fields, $order_type ); 

Но это не похоже на конкретную подписку?

Когда я пытаюсь запустить его, я получаю роковую ошибку, без которой я проходил:

Неустранимая ошибка: Ошибка при отсутствии: использование $ this, если не в контексте объекта в C: \ xampp \ htdocs \ mysite.com \ wp-content \ plugins \ woocommerce-subscriptions \ включает \ class-wc-subscription.php: 1413

Я создаю свой собственный плагин, и я выбираю все подписки, где post status = wc-active из таблицы сообщений. Я просмотрел woocommerce_order_items « woocommerce_order_items », « woocommerce_order_itemmeta » и « postmeta », но ни один из них не предоставляет способ получить связанные заказы для пользовательской подписки на подписку …

Если бы я только знал, где отношения для пользователей, которые покупают подписки и связанные с ними заказы, то я могу написать некоторые sql, но я понятия не имею, и Google не дает никаких результатов.

Есть идеи?

Моя настройка:

  • версия 7.0.4
  • WordPress версия 4.7.3
  • woocommerce 2.6.8
  • подписки на woocommerce: 2.0.18

Обновлено: Добавлена ​​совместимость WooCommerce версии 3+

Очень легко получить идентификатор заказа из объекта подписки. Я собираюсь выбрать, как и вы, все подписки, где 'post status' = 'wc-active' из таблицы сообщений.

 // 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 '<pre>';print_r($subscription);echo '</pre>'; } 

Вы также можете раскомментировать в почтовом запросе строки массива 'meta_key' и 'meta_value' чтобы получить подписки для одного клиента … Этот код проверен и работает

Самое главное здесь:

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

… поскольку вы получите объект WC_Subscription, в который вы можете применить все методы WC_Subscription, не получая ошибок, например:

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