特定优惠券的Woocommerce总销售额

axe*_*a82 6 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中要求这个.我的想法是将其作为"order_item_name = {COUPON_NAME_VARIABLE}"的foreach,因此我可以总结使用该优惠券的所有销售的总额(即不是优惠券折扣值).

axe*_*a82 0

因此,经过大量测试后,我想出了一个可行的解决方案。它不是最时尚的,但可以完成工作。

如果任何 SQL 忍者看到这一点,如果您能建议任何更简化的查询,那就太好了:)

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

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

  • 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');
    
    Run Code Online (Sandbox Code Playgroud)

需要注意的是,我将实际基础货币更改为 [YOUR_BASE_CURRENCY]。欢迎评论(建设性的):)