特定优惠券的Woocommerce总销售额

时间:2016-12-16 13:32:03

标签: php mysql woocommerce

问题:

我需要一种方法来首先使用特定的优惠券代码进行所有销售。然后从所有销售中获得总收入(最好减去这些销售的任何回报。获得实际收入值。)

执行的想法

我正在使用woocommerce 2.6.8和MySql数据库。我的猜测是,我不得不首先计算使用PHP和MySql的特定优惠券的销售数量。然后,对于具有特定优惠券的每个唯一订单ID,请对总和进行新查询。

非常感谢有关PHP和查询的外观的任何建议:)

我应该指出我不想从优惠券中获得折扣的总和。我需要计算特定优惠券(而不是折扣)的总价值。

好的,到目前为止仍然没有可行的解决方案。但这就是我认为它的基本结构。获得总数并不容易,因为优惠券不与订单直接关联。 我认为查询必须符合以下要求:

{TBLPRFX} _woocommerce_order_items

步骤1.获取order_id FOR order_item_name = {COUPON_NAME}

步骤2.获取order_item_id FOR order_item_type = line_item WHERE order_id EQUAL {来自第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 = {RESULT FROM STEP 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中提出这个要求。我的想法是将其作为一个foreach,其中" order_item_name = {COUPON_NAME_VARIABLE}",因此我可以总结使用该优惠券的所有销售总额(即不是优惠券折扣值)。

1 个答案:

答案 0 :(得分:0)

经过大量测试后,我想出了一个有效的解决方案。它不是最谦虚的,但可以完成工作。

如果有任何SQL-ninjas看到这一点,那么如果您可以建议更精简的查询会很棒:)

在制作完第一个工作解决方案后,我意识到需要检查更多步骤以获得更准确的总数。处理退款,税收,折扣等,并确保我只从已完成的订单中获取数据(因为已取消,暂停,待处理等在完成之前不是销售)。

所以,这就是我最终的结果。就像我说的,我知道它需要一些工作,可能会做得更好。但就目前而言,它确实有效。

  • 修改了FUNCTIONS.PHP代码 -

    // 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]。欢迎评论(建设性的):)