【问题标题】:Get orders total purchases amount for the day in Woocommerce在 Woocommerce 中获取当天的订单总购买量
【发布时间】:2018-07-03 10:56:59
【问题描述】:

对于 Woocommerce,我在下面编写了代码,试图获取今天的订单总购买量:

function order_total_woo_fahad(){

    // Get orders from people named John that were paid in the year 2016.
$orders = wc_get_orders( array(
    'date_paid' => '2018-07-03'
) );
$total_of_all=0;
for($i=0;$orders[i];$i++)
    $total_of_all= $orders[i]->get_total();
    return $total_of_all;
}

但它返回 null。

我做错了什么?如何获取当天的订单总购买金额?

【问题讨论】:

    标签: php sql wordpress woocommerce orders


    【解决方案1】:

    最好和最有效的方法是使用以下非常简单的 SQL 查询,它将获取过去 24 小时内“处理中”和“已完成”订单状态的所有订单总数的总和:

    function get_daily_purchases_total(){
        global $wpdb;
    
        return $wpdb->get_var( "
            SELECT SUM(pm.meta_value)
            FROM {$wpdb->prefix}posts as p
            INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
            WHERE p.post_type = 'shop_order'
            AND p.post_status IN ('wc-processing','wc-completed')
            AND UNIX_TIMESTAMP(p.post_date) >= (UNIX_TIMESTAMP(NOW()) - (86400))
            AND pm.meta_key = '_order_total'
        " );
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。


    USAGE 示例 - 显示每日总购买格式化金额:

    <?php echo '<p>Total purchased of the day: ' . strip_tags( wc_price(get_daily_purchases_total() ) ) . '</p>'; ?>
    

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

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

    通过这一行:

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

    【讨论】:

    • 嗨洛伊克。它确实返回订单总额,但它以 html 形式返回,例如:&lt;span class="woocommerce-Price-amount amount"&gt;&lt;span class="woocommerce-Price-currencySymbol"&gt;AED&lt;/span&gt; 140.00&lt;/span&gt;
    • 您知道如何将此查询限制为仅由登录到其帐户的当前用户进行的购买吗?
    • @LoicTheAztec 是否可以获得特定类别的总销售额?
    【解决方案2】:
    <?php
    global $wpdb;
    
    $date_from = '2015-11-20';
    $date_to = '2015-12-20';
    $post_status = implode("','", array('wc-processing', 'wc-completed') );
    
    $result = $wpdb->get_results( "SELECT * FROM $wpdb->posts 
                WHERE post_type = 'shop_order'
                AND post_status IN ('{$post_status}')
                AND post_date BETWEEN '{$date_from}  00:00:00' AND '{$date_to} 23:59:59'
            ");
    
    echo "<pre>";
    print_r($result);
    ?>
    

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 2019-01-10
      • 2020-06-08
      • 2017-10-11
      • 2022-01-08
      相关资源
      最近更新 更多