Получить идентификатор заказа из текущих пользовательских заказов в WooCommerce

Вот ситуация. У меня есть сайт woocommerce, используемый в качестве торговой площадки. Продаю на нем игры, за некоторые покупатель получает стим ключ. Для этого я работаю над системой атрибуции ключей, поэтому при переходе на страницу ключ будет атрибутом для пользователя.

Для этого я хочу проверить все заказы, сделанные текущим пользователем (при входе в систему и на странице), и проверить игру, которую он купил.

Здесь я нахожу очень полезную информацию: Как получить информацию о заказе WooCommerce

Однако мне не удается получить все заказы текущего пользователя. Я сначала думаю сделать запрос SQL, но я не нахожу ссылку в базе данных между заказом и пользователем.

У тебя есть зацепка?


person Mathieu Roux    schedule 14.02.2017    source источник
comment
Всегда задавайте вопросы, имеющие некоторый код, и проблему, которая у вас есть в коде, здесь.   -  person Vinay    schedule 14.02.2017
comment
Вот в чем дело. У меня есть код, который нужно сделать после, и он работает правильно. У меня просто нет этой части. Но я понял, спасибо   -  person Mathieu Roux    schedule 14.02.2017


Ответы (1)


Обновлено Добавлена ​​совместимость с WooCommerce 3+ (январь 2018 г.)

Вот код, который вам понадобится для получения всех заказов клиентов и просмотра каждого элемента каждого заказа клиента:

## ==> 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>';
    }
} 

Этот код проверен и работает


Связанный:

person LoicTheAztec    schedule 14.02.2017
comment
Спасибо за это. Однако у меня возникла проблема с этой строкой: foreach($customer_order->get_item() as $item_id => $item_values) Ошибка: Неустранимая ошибка: вызов неопределенного метода WP_Post::get_item() - person Mathieu Roux; 14.02.2017
comment
Я исправляю это, заменяя на: foreach(wc_get_order($order_id)->get_items() as $item_id => $item_values). Кажется, это работает, мне просто нужно иметь другую информацию, например, получить название продукта. Я должен получить его самостоятельно. Большое спасибо! - person Mathieu Roux; 14.02.2017
comment
Я думаю, что это ошибка при синхронизации моей учетной записи на iPhone. Я не использовал Stackoverflow со вчерашнего дня. Я понял, что слово «Решено» тоже было удалено из названия. Ответ снова помечен как принятый;) - person Mathieu Roux; 15.02.2017