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

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

Я нашел в этой официальной документации Функция подписки & Ссылка на недвижимость:

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

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

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

Неустранимая ошибка: Uncaught Ошибка: использование $ this, когда не в контексте объекта в
C: \ XAMPP \ HTDOCS \ mysite.com \ сор-контента \ Plugins \ WooCommerce-подписок \ включает \ класс-туалет-subscription.php: 1413

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

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

Есть идеи?

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

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

4

Решение

Обновлено: Добавлена ​​совместимость с 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();
8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]