2017-09-16 3 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

関連する問題