从WooCommerce中获取当前用户订单的订单ID

时间:2017-02-14 10:31:54

标签: php wordpress woocommerce product orders

情况如下。我有一个用作市场的woocommerce网站。我在其上销售游戏,因为有些购买者会收到蒸汽钥匙。为此,我正在开发一个密钥归属系统,因此通过访问页面,密钥将成为用户的属性。

为此,我想检查当前用户发出的所有订单(登录和页面上),并查看他购买的游戏。

我在这里找到了一些非常有用的信息:How to get WooCommerce order details

但是,我没有设法让所有订单成为当前用户。我首先考虑发出SQL请求,但是我没有在订单和用户之间找到数据库上的链接。

你有领导吗?

1 个答案:

答案 0 :(得分:11)

  

已更新 已添加与WooCommerce 3+的兼容性(2018年1月)

以下是获取所有客户订单并查看每个客户订单的每个项目所需的代码:

## ==> Define HERE the statuses of that orders 
$order_statuses = array('wc-on-hold', 'wc-processing', 'wc-completed');

## ==> Define HERE the customer ID
$customer_user_id = get_current_user_id(); // current user ID here for example

// Getting current customer orders
$customer_orders = wc_get_orders( array(
    'meta_key' => '_customer_user',
    'meta_value' => $customer_user_id,
    'post_status' => $order_statuses,
    'numberposts' => -1
) );


// Loop through each customer WC_Order objects
foreach($customer_orders as $order ){

    // Order ID (added WooCommerce 3+ compatibility)
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;

    // Iterating through current orders items
    foreach($order->get_items() as $item_id => $item){

        // The corresponding product ID (Added Compatibility with WC 3+) 
        $product_id = method_exists( $item, 'get_product_id' ) ? $item->get_product_id() : $item['product_id'];

        // Order Item data (unprotected on Woocommerce 3)
        if( method_exists( $item, 'get_data' ) ) {
             $item_data = $item->get_data();
             $subtotal = $item_data['subtotal'];
        } else {
             $subtotal = wc_get_order_item_meta( $item_id, '_line_subtotal', true );
        }

        // TEST: Some output
        echo '<p>Subtotal: '.$subtotal.'</p><br>';

        // Get a specific meta data
        $item_color = method_exists( $item, 'get_meta' ) ? item->get_meta('pa_color') : wc_get_order_item_meta( $item_id, 'pa_color', true );

        // TEST: Some output
        echo '<p>Color: '.$item_color.'</p><br>';
    }
} 

此代码经过测试并正常运行

相关: