【问题标题】:Get today's total orders count for each product in Woocommerce获取 Woocommerce 中每种产品今天的总订单数
【发布时间】:2019-01-10 19:02:58
【问题描述】:

我正在寻找一个代码 sn-p 来获取今天每种产品的总销售额,所以我可以在我的主题 functions.php 文件中使用它。

输出应该是这样的(每件商品的总销售额):

Product xxx = 25 orders
Product yyy = 18 orders
Product zzz = 8 orders

【问题讨论】:

    标签: php sql wordpress woocommerce orders


    【解决方案1】:

    这可以通过以下非常简单的 SQL 查询和 foreach 循环来完成。

    这将为您提供过去 24 小时内按产品计数的产品列表(以及产品变体,但不是父变量产品):

    global $wpdb;
    
    $results = $wpdb->get_results( "
        SELECT DISTINCT woim.meta_value as id, COUNT(woi.order_id) as count, woi.order_item_name as name
        FROM {$wpdb->prefix}woocommerce_order_itemmeta as woim
        INNER JOIN {$wpdb->prefix}woocommerce_order_items as woi ON woi.order_item_id = woim.order_item_id
        INNER JOIN {$wpdb->prefix}posts as p ON p.ID = woi.order_id
        WHERE p.post_status IN ('wc-processing','wc-on-hold')
        AND UNIX_TIMESTAMP(p.post_date) >= (UNIX_TIMESTAMP(NOW()) - (86400))
        AND ((woim.meta_key LIKE '_variation_id' AND woim.meta_value > 0)
        OR (woim.meta_key LIKE '_product_id'
        AND woim.meta_value NOT IN (SELECT DISTINCT post_parent FROM {$wpdb->prefix}posts WHERE post_type LIKE 'product_variation')))
        GROUP BY woim.meta_value
    " );
    
    // Loop though each product
    foreach( $results as $result ){
        $product_id   = $result->id;
        $product_name = $result->name;
        $orders_count = $result->count;
        
        // Formatted Output
        echo 'Product: ' . $product_name .' (' . $product_id . ') = ' . $orders_count . '<br>';
    }
    

    经过测试并且有效。


    如果您想获得基于“今天”日期的总数,您将在代码中替换这一行:

    AND UNIX_TIMESTAMP(p.post_date) >= (UNIX_TIMESTAMP(NOW()) - (86400))
    

    通过这一行:

    AND DATE(p.post_date) >= CURDATE()
    

    时区调整使用CONVERT_TZ() SQL function
    (您将在哪里调整'+10:00'最后一个参数作为偏移量以匹配时区)

    AND DATE(p.post_date) >= DATE(CONVERT_TZ( NOW(),'+00:00','+10:00'))
    

    相关的类似答案:

    【讨论】:

    • 亲爱的@LoicTheAztec 有没有办法根据特定时区选择AND DATE(p.post_date) >= DATE(NOW())?可以说太平洋时间 (PT) 还是基于 WordPress 选择的时区位置?服务器位于 CT 但我的位置是 PT,我该怎么做?
    • @tatifox 我在最后添加了一个关于时区调整的更新……
    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2019-08-29
    • 2022-01-21
    • 1970-01-01
    • 2016-12-26
    • 2014-11-18
    相关资源
    最近更新 更多