WooCommerce订阅 - 获取特定订阅的相关订单ID



是否有WooCommerce功能可以将我的所有相关订单(至少为订单ID)返回用户拥有BOUGH的特定订阅?

我在此官方文档订阅功能中找到了&属性参考:

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

,但这似乎不是针对特定订阅的?

每当我尝试运行它时,我都会得到致命错误 no Mater我所传递的内容:

致命错误:未接收错误:在不在对象上下文中的$中使用$ c: xampp htdocs mysite.com wp-content plugins wooocommerce-subscriptions incress class-wc-subscription.php:1413

我正在制作自己的插件,然后选择所有订阅中的 post status = wc-active。我已经看过" woocommerce_order_items"," woocommerce_order_itemmeta"one_answers" postmeta"表,但它们俩都没有提供用户购买订阅的相关订单...

如果我只知道用户购买订阅及其相关订单的关系在哪里,那么我可以写一些SQL,但我不知道,Google也不会产生任何结果。

有什么想法?

我的设置:

  • PHP版本7.0.4
  • WordPress版本4.7.3
  • WooCommerce 2.6.8
  • WooCommerce订阅:2.0.18

更新: 添加了WooCommerce版本3 兼容性

从订阅对象获取订单ID非常容易。我将选择,就像您一样,所有订阅其中 'post status' = 'wc-active' 从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 '<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();

相关内容

  • 没有找到相关文章

最新更新