2016-08-14 5 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. はforeachの中で、それぞれの顧客を通じて行く顧客のリストを取得します。ループ
  2. お客様のIDを取得
  3. LEFTはpost_idの上wp_postmetaテーブルのためにJOINを追加します。

    LEFT JOIN {$wpdb->postmeta} AS postmeta ON order_items.order_id = postmeta.post_id 
    
  4. にこの2行を挿入します:

    AND postmeta.meta_key = '_customer_user' 
    
    AND postmeta.meta_value = '$customer_id' 
    
  5. はその後、顧客ループ内であなたのループによって合計を取得するために来ます顧客

は、これはコードです:

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 1年後、**それは動作します!!! **しかしこれは遅すぎます:) ...私はただ解決策を見つけたいと思っていました。答えは 'wp_posts'テーブルではなく、' wp_postmeta'テーブルで顧客IDを探すことでした。またね… – LoicTheAztec

関連する問題