2016-08-14 142 views
3

我試圖總結每個用戶的具體項目,但它似乎無法識別當前用戶,它彙總了所有客戶的所有訂單。WooCommerce我的帳戶頁面 - 獲取當前用戶的訂單查詢

我該如何解決這個問題?我錯過了什麼?

下面是我使用的代碼:

$order_items = apply_filters('woocommerce_reports_top_earners_order_items', $wpdb->get_results(" 

SELECT order_item_meta_2.meta_value as product_id, SUM(order_item_meta.meta_value) as line_total FROM {$wpdb->prefix}woocommerce_order_items as order_items 

LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id 

LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta_2 ON order_items.order_item_id = order_item_meta_2.order_item_id 

LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID 

WHERE posts.post_type = 'shop_order' 

AND posts.post_status IN ('" . implode("','", array('wc-completed', 'wc-processing', 'wc-on-hold')) . "') 

AND order_items.order_item_type = 'line_item' 

AND order_item_meta.meta_key = '_line_total' 

AND order_item_meta_2.meta_key = '_product_id' 

GROUP BY order_item_meta_2.meta_value 

")); 
$totalPR = 0; 
$Products = array(1507, 1406, 1506); 

foreach ($order_items as $item) { 

if (in_array($item->product_id, $Products)) { 

     $totalPR = $item->line_total + $totalPR; 
     echo $totalPR; 

    } 

} 
+0

究竟你的意思是用 「不承認說用戶」?你有錯誤嗎?意外的輸出?還有別的嗎?請[編輯]問題以包含儘可能多的信息! – Carpetsmoker

回答

1

更新2 - 它的工作使這個:

  1. 獲取客戶名單
  2. 在foreach遍歷每個客戶迴路
  3. 取得客戶編號
  4. 添加LEFT JOIN爲wp_postmeta表上POST_ID:

    LEFT JOIN {$wpdb->postmeta} AS postmeta ON order_items.order_id = postmeta.post_id 
    
  5. 插入此2號線到您的WHERE:

    AND postmeta.meta_key = '_customer_user' 
    
    AND postmeta.meta_value = '$customer_id' 
    
  6. 然後是客戶循環內的循環,通過得到的總和客戶

這是代碼:

global $wpdb; 

// Set here your product ids 
$products = array(1507, 1406, 1506); 
$all_customers = get_users('role=customer'); 

foreach ($all_customers as $customer) { 
    $customer_id = $customer->ID; 
    $total_pr = 0; 

    $query = $wpdb->get_results(" 

     SELECT order_item_meta_2.meta_value as product_id, 

     SUM(order_item_meta.meta_value) as line_total 

     FROM {$wpdb->prefix}woocommerce_order_items as order_items 

     LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id 

     LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta_2 ON order_items.order_item_id = order_item_meta_2.order_item_id 

     LEFT JOIN {$wpdb->postmeta} AS postmeta ON order_items.order_id = postmeta.post_id 

     LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID 

     WHERE posts.post_type = 'shop_order' 

     AND posts.post_status IN ('" . implode("','", array('wc-completed', 'wc-processing', 'wc-on-hold')) . "') 

     AND postmeta.meta_key = '_customer_user' 

     AND postmeta.meta_value = '$customer_id' 

     AND order_items.order_item_type = 'line_item' 

     AND order_item_meta.meta_key = '_line_total' 

     AND order_item_meta_2.meta_key = '_product_id' 

     GROUP BY order_item_meta_2.meta_value 

    "); 

    $results = apply_filters('woocommerce_reports_top_earners_order_items', $query); 

    foreach ($results as $values) { 
     if (in_array($values->product_id, $products)) { 
      $total_pr += $values->line_total; 
     } 
    } 
    echo 'customer ID: ' . $customer->ID . ' | Total PR: ' . number_format($total_pr, 2) . '<br>'; 
} 

測試和工程。它將輸出列表與Customer IDs和相應的Total PR


參考文獻:

+0

嗨,感謝您的回答,但它不顯示結果伴侶。 –

+0

@PatrickJosephAragones年後,**它的工作原理!!! **但這已經太晚了:) ...我只是想找到解決方案,現在完成了。答案是在'wp_postmeta'表中查找客戶ID,而不是在'wp_posts'表中查找。回頭見… – LoicTheAztec

相關問題