在 Woocommerce 中获取当天的订单总购买量

1 php sql wordpress orders woocommerce

对于 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;
}
Run Code Online (Sandbox Code Playgroud)

但它返回空值。

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

Loi*_*tec 5

获得它的最好和有效的方法是使用以下非常轻量级的 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'
    " );
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。测试和工作。


用法示例- 显示每日总购买的格式化金额:

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

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

AND UNIX_TIMESTAMP(p.post_date) >= (UNIX_TIMESTAMP(NOW()) - (86400))
Run Code Online (Sandbox Code Playgroud)

通过这一行:

AND DATE(p.post_date) >= CURDATE()
Run Code Online (Sandbox Code Playgroud)