2016-12-16 1 views
6

문제 :Woocommerce 총 판매량

내가 먼저 특정 쿠폰 코드로 만든 모든 판매를 얻을 수있는 방법이 필요합니다. 그런 다음 모든 매출액에서 총 수익을 얻으십시오 (해당 판매 수익을 제외한 경우). 실제 수익 가치를 얻으려면.

을 실행 내가 이것에 대한 woocommerce 2.6.8 및 MySQL 데이터베이스를 사용하고 있습니다위한

아이디어. 내 추측으로는 PHP와 MySql을 사용하여 특정 쿠폰으로 이루어진 매출의 수를 어떻게 든 계산해야한다는 것입니다. 그런 다음 특정 쿠폰이있는 고유 주문 ID마다 총계에 대한 새 조회를 작성하십시오. PHP는 쿼리의 모습 방법에

어떤 제안이 크게 감사합니다 :)

내가 쿠폰에서 할인의 합계를 얻기 위해 찾는 게 아니에요 지적한다. 특정 쿠폰 (할인이 아닌)으로 판매 된 총 가치를 계산해야합니다.

OK, 지금까지는 아직까지 작동하지 않습니다. 그러나 이것이 이것이 내가 믿는 기본 구조입니다. 쿠폰이 주문과 직접 ​​연관되어 있지 않기 때문에 합계를 구하는 것은 쉽지 않습니다.

{TBLPRFX} order_item_name = {COUPON_NAME}의

1 단계 GET의 ORDER_ID을 _woocommerce_order_items

2 단계 GET : 나는 쿼리가이 라인에 뭔가해야한다고 생각 order_item_id FOR order_item_type = line_item WHERE order_id 등식 {결과 1 단계부터}

| order_item_id | order_item_name | order_item_type | order_id |

| 40971 | {COUPON_NAME} | 쿠폰 | 001

| 40970 | 부가가치세 | 세금 | 001

| 40969 | {PRODUCT_NAME} | line_item | 001

-

{TBLPRFX} _woocommerce_order_itemmeta

3 단계.SUM meta_value FROM meta_key = _line_tax AND meta_key = _line_total WHERE order_item_id = {결과 2 단계}

| order_item_id | meta_key | meta_value |

| 40969 | _line_tax | {VALUE_TAX}

| 40969 | _line_total | {VALUE_TOTAL}

| 40969 | _product_id | {PRODUCT_ID}

-

내가 :) MySQL과 PHP이 요청하는 방법을 정말 확실하지 알아내는 데 도움이 필요 쿼리입니다. 아이디어는 "order_item_name = {COUPON_NAME_VARIABLE}"에서 foreach로 설정하는 것이므로 쿠폰이 사용 된 모든 판매 (예 : 쿠폰 할인 값이 아님)의 합계를 요약 할 수 있습니다.

+0

이것은 한 번 쿼리입니까? 아니면 이것을 보고서로 페이지에 추가하려고합니까? woocommerce 테이블에 대한 지식이있는 사람이라면 간단한 SQL 쿼리를 통해 결과를 얻을 수 있습니다. 이것은 Google 검색으로 https://www.google.com/search?q=woocommerce+sql+query+orders+with+coupon&ie=utf-8&oe=utf-8 연구를 시작합니다. 그러나 SQL 쿼리는 ' SELECT SUM (orderValue) from order order.coupon = 'somecoupon'' --- 따라서 카운팅이나 루핑을 반드시 수행 할 필요가 없으므로 SQL에서 무거운 짐을 처리 할 수 ​​있습니다. –

+0

보고서 페이지로 추가하면 향후 프로젝트가 될 수 있습니다. 지금은 PHP 페이지에서 합계를 얻는 것만으로도 괜찮습니다 :) GSearch를 살펴보고 뭔가를 알아낼 수 있는지 살펴 보겠습니다 ... '그때까지 제안을 계속하십시오.) 예, 귀하의 제안 쿼리는 내가 염두에 두었던 것입니다, 나는 단지 그것을 실행하는 방법을 모릅니다. (그리고 모든 컬럼을 찾을 곳을 찾아야합니다.) Woocommerce는 항상 SQL 구조에서 매우 직선적이지 않습니다.) – axelra82

+0

예, 죄송합니다. 저는 워드 프레스 나 woocommerce를 사용하지 않지만 데이터베이스를 다루고 일반적으로 Excel 테이블과 같은 SQL 테이블을 볼 수있는 '관리 도구'를 사용하여 거기에서 SQL 쿼리를 작성합니다. t는 WordPress에 그런 것과 비슷한 것이 있는지 안다. 때때로 도구는 모든 테이블의 멋진 '웹'을 만들 수 있으므로 상호 연결되는 방식을 볼 수 있습니다. –

답변

0

많은 테스트를 마친 후에 나는 작동하는 해결책을 찾았습니다. 가장 세련된 것이 아니지만 일을 끝내게됩니다.

모든 SQL-닌자이 보이면 당신은 내가 더 검사 할 필요가 더 많은 단계가 있다는 것을 깨달았다 첫 번째 작업 솔루션을 한 후 더 이상 효율적인 쿼리 :

을 제안 할 수 있다면 좋을 것 정확한 합계. 환불, 세금, 할인 등을 처리하고 완료된 주문 (취소, 보류 중, 보류 중 등은 판매가 완료 될 때까지 판매가 아니기 때문에)에서만 데이터를 받도록하십시오.

그래서, 이것이 제가 끝내었던 것입니다. 내가 말했듯이, 나는 그것이 어떤 일을 필요로하고 더 잘 수행 될 수 있음을 안다. 하지만 지금은 작동합니다. FUNCTIONS.PHP에 대한

  • REVISED 코드 -

    // COUPON CHECK 
    function couponcheck() { 
    global $wpdb; 
    
    $gtl    = 0; // Grand Total 
    $total_sales  = 0; 
    $cpn    = $_GET['cpn']; // Get coupon name from URL string 
    $tblprfx   = '[YOUR_TABLE_PREFIX]'; // Table prefix 
    $wpps    = 'posts'; // Look for post_status 
    $wppm    = 'postmeta'; 
    $wcoi    = 'woocommerce_order_items'; 
    $conversion_value = 1; 
    $base_currency  = '[YOUR_BASE_CURRENCY]'; 
    $currency; 
    $orders_made; 
    
    // Check to make sure there is a couon name in string 
    if(isset($cpn) && !empty($cpn)){ 
        // Query chain 
        $init_result = $wpdb->get_results("SELECT order_id FROM {$tblprfx}{$wcoi} WHERE order_item_name='$cpn'"); 
        $orders_made = count($init_result); 
        foreach($init_result as $ir){ 
         $r1 = $ir->order_id; 
         $completed_result = $wpdb->get_results("SELECT ID FROM {$tblprfx}{$wpps} WHERE post_status='wc-completed' AND ID=$r1"); 
         foreach($completed_result as $post_rows) { 
          $pr = $post_rows->ID; 
          $completed_sales += 1; 
          $currency_result = $wpdb->get_results("SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_order_currency'"); 
          foreach($currency_result as $cr) { 
           $currency = $cr->meta_value; 
           if($currency === 'EUR'){ 
            $currency = 'EUR'; 
            $currency_rate = $wpdb->get_results("SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_woocs_order_rate'");       foreach($currency_rate as $rv) { 
             $rate_value = $rv->meta_value; 
             $conversion_value = $rate_value; 
            } 
           } 
          } 
          $data_result = $wpdb->get_results("SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_order_total'"); 
          foreach($data_result as $dr) { 
           $d = $dr->meta_value; 
           if($currency === 'EUR'){ 
            $eur += $d; 
            $d = $d/$conversion_value; 
           }else{ 
            $[YOUR_BASE_CURRENCY] += $d; 
           } 
           $gtl += $d; 
          } 
         } 
        } 
        // Total number of sales 
        $refunded_orders = $orders_made-$completed_sales; 
        $order_avg = $gtl/$completed_sales; 
        echo '<p>Total <strong>completed, non-refunded, sales made (after discounts)</strong> with coupon <strong>' . strtoupper($cpn) . '</strong>: <br />(Number of refunded orders: <strong>' . $refunded_orders . ')</strong></p><h2>' . $completed_sales . '</h2><p>At a total <strong>sales value</strong> of:</p><h2>' . number_format($[YOUR_BASE_CURRENCY],2) . ' [YOUR_BASE_CURRENCY]</h2><h2>&euro;' . number_format($eur,2) . '</h2><p>Adding up to a <strong>sum total</strong> of:</p><h2>' . number_format($gtl,2) . ' [YOUR_BASE_CURRENCY]</h2><p>Creating an average order value of:<br /><strong>' . number_format($order_avg,2) . ' [YOUR_BASE_CURRENCY]</strong>'; 
    
    } 
    
    } add_shortcode('coupons', 'couponcheck'); 
    

작은 노트는 내가 [YOUR_BASE_CURRENCY] 내 실제 기본 통화를 변경한다는 것입니다. 덧글 (건설적인 것들)을 환영합니다 :)