2017-09-16 173 views
2

我正在爲reporting plugin創建插件擴展。目前的插件創建各種報告,包括每個產品最暢銷產品的報告。WooCommerce:獲取SQL查詢中產品變體的總銷售額

我需要重新創建此設置以顯示基於變體的頂級產品。所需的字段是產品名稱,SKU,已售出數量,銷售總額。

如何獲取產品變體的數據?

我在下面輸入了我的當前代碼。

SQL查詢和數據處理:

$phoen_product_query = " 
     SELECT 
      posts.post_title AS product_name, 
      meta.meta_key as mkey, 
      meta.meta_value as product_value, 
      posts.ID AS ID 
      FROM {$wpdb->posts} AS posts 
      LEFT JOIN {$wpdb->postmeta} AS meta 
       ON posts.ID = meta.post_id 
     WHERE 
      posts.post_status IN ('publish','private') 
      AND posts.post_type IN ('product') 
      AND meta.meta_key IN ('total_sales' ,'_price' ,'post_views_count', '_sku') 
     ORDER BY 
      posts.ID ASC, 
      meta.meta_key ASC 
    "; 
    $phoen_product_data = $wpdb->get_results( $phoen_product_query,ARRAY_A); 

    foreach($phoen_product_data as $key1 => $valuee){ 

     if(!isset($phoen_top_products[$valuee['ID']])){ 

      $phoen_top_products[$valuee['ID']] = Array(); 

      $phoen_top_products[$valuee['ID']] = Array(

       "produc_total" => 0, 

       "product_price" => 0, 

       "product_count" => 0, 

       "product_views" => 0 

      ); 

     } 

     switch ($valuee['mkey']) { 

      case "_sku": 

       $phoen_top_products[$valuee['ID']]["product_sku"] = $valuee['product_value']; 

       break; 

      case "_price": 

       $phoen_top_products[$valuee['ID']]["product_price"] = $valuee['product_value']; 

       break; 

      case "post_views_count": 

       $phoen_top_products[$valuee['ID']]["product_views"] = $valuee['product_value']; 

       break; 

      case "total_sales": 

       $phoen_top_products[$valuee['ID']]["product_count"] = $valuee['product_value']; 

       $phoen_top_products[$valuee['ID']]["produc_total"] = $valuee['product_value'] * $phoen_top_products[$valuee['ID']]["product_price"]; 

       $phoen_top_products[$valuee['ID']]["product_name"] = $valuee['product_name']; 

       $phoen_top_products[$valuee['ID']]["ID"] = $valuee['ID']; 

       break; 

      default: 

       break; 

     } 

    } 

管理模塊:

<table class="table table-striped table-bordered" id="phoen_top_product_table"> 
<thead> 
    <tr> 
    <th><?php _e('Product Name', 'advanced-reporting-for-woocommerce'); ?></th> 
    <th><?php _e('SKU', 'advanced-reporting-for-woocommerce'); ?></th> 
    <th><?php _e('Qty', 'advanced-reporting-for-woocommerce'); ?></th> 
    <th><?php _e('Amount', 'advanced-reporting-for-woocommerce'); ?></th> 
    </tr> 
</thead> 
<tbody> 
<?php 
$phoen_repot_product=array(); 
$phoen_product_count=0; 

for($i=0; $i<count($phoen_top_products); $i++) 
{ 
    if($phoen_get_product_val!='View All') 
    { 
     if($phoen_product_count<$phoen_get_product_val) 
     { 

      ?> 
      <tr class="phoen_top_product_tr"> 
       <td> 

        <?php $phoen_product_title=isset($phoen_top_products[$i]['product_name'])?$phoen_top_products[$i]['product_name']:''; 

        echo $phoen_product_title; ?> 

       </td> 

       <td> 

        <?php $phoen_product_sku=isset($phoen_top_products[$i]['product_sku'])?$phoen_top_products[$i]['product_sku']:'';  

         echo $phoen_product_sku; ?> 

       </td> 

       <td> 

        <?php 

         $phoen_product_quentity=isset($phoen_top_products[$i]['product_count'])?$phoen_top_products[$i]['product_count']:'';  

         echo $phoen_product_quentity; 

        ?> 

       </td> 

       <td> 
        <?php 

        $phoen_total_product_price=isset($phoen_top_products[$i]['produc_total'])?$phoen_top_products[$i]['produc_total']:''; 

         echo get_woocommerce_currency_symbol().($phoen_total_product_price); 

        ?> 
       </td> 


      </tr> 

      <?php 

      $phoen_repot_product[$i]= array(

       'name'=>$phoen_product_title, 
       'sku'=>$phoen_product_sku, 
       'product_count'=>$phoen_product_quentity, 
       'amount'=>$phoen_total_product_price 

      ); 
     } 
      $phoen_product_count++; 
    }else{ 
     ?> 
      <tr class="phoen_top_product_tr"> 
       <td> 

        <?php $phoen_product_title=isset($phoen_top_products[$i]['product_name'])?$phoen_top_products[$i]['product_name']:''; 

        echo $phoen_product_title; ?> 

       </td> 

       <td> 

        <?php $phoen_product_sku=isset($phoen_top_products[$i]['product_sku'])?$phoen_top_products[$i]['product_sku']:''; 

        echo $phoen_product_sku; ?> 

       </td> 

       <td> 

        <?php 

         $phoen_product_quentity=isset($phoen_top_products[$i]['product_count'])?$phoen_top_products[$i]['product_count']:'';  

         echo $phoen_product_quentity; 

        ?> 

       </td> 

       <td> 
        <?php 

        $phoen_total_product_price=isset($phoen_top_products[$i]['produc_total'])?$phoen_top_products[$i]['produc_total']:''; 

         echo get_woocommerce_currency_symbol().($phoen_total_product_price); 

        ?> 
       </td> 


      </tr> 

      <?php 

      $phoen_repot_product[$i]= array(

       'name'=>$phoen_product_title, 
       'sku'=>$phoen_product_sku, 
       'product_count'=>$phoen_product_quentity, 
       'amount'=>$phoen_total_product_price 

      ); 
    } 


} 

$phoen_product_file = fopen('phoen-repot-product.csv', 'w'); 

fputcsv($phoen_product_file, array('Product Name', 'SKU', 'Qty', 'Amount')); 

foreach ($phoen_repot_product as $phoen_product_row) 
{ 
    fputcsv($phoen_product_file, $phoen_product_row); 
} 

fclose($phoen_product_file);  

?> 

</tbody> 

+0

對不起,延遲!我以爲我已經選擇了你的答案。 – Christy

回答

1

在你的數據庫查詢,你忘記了還打電話給post_type'product_variation'

可以替換這一行:

AND posts.post_type IN ('product') 

通過這樣的:

AND posts.post_type IN ('product','product_variation') 

還是這個(短):

AND posts.post_type LIKE 'product%' 

,你也將得到所有產品的變化數據。 我已經測試過你的代碼,它的工作原理是
(我只有'post_views_count'空,因爲我認爲是自定義字段)。

+1

謝謝你的回答!添加'product_variation'幫助我到達目的地。非常感激! – Christy