2016-08-14 4 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. 왼쪽이 post_id를에 wp_postmeta 테이블에 대한 가입 추가

    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. 그런 다음 고객의 루프 내부 루프에 의해 합계를 얻기 위해 온다

    ,536,913,632 :

이 고객

코드입니다 10
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 및 해당 과 함께 목록을 출력합니다.


참고 :

+0

답변을 주셔서 감사합니다. 결과 메이트가 표시되지 않습니다. –

+0

@PatrickJosephAragones 1 년 후, ** 작동합니다 !!! **하지만 너무 늦었습니다 :) ... 방금 솔루션을 찾고 싶었으므로 지금 완료되었습니다. 대답은'wp_posts' 테이블이 아니라'wp_postmeta' 테이블에서 고객 ID를 찾는 것입니다. 주위에 당신을보고… – LoicTheAztec

관련 문제