在 Woocommerce 中每天按产品 ID 获取订单计数

Get Orders Count by product ID every day in Woocommerce

我想获取代表两列的 table:按指定产品 ID 和订单状态的订单日期和订单计数。 因此,我应该获得具有指定状态(例如,暂停)的产品(按 ID)在指定日期范围内创建了多少订单。

我试过组合几个代码


SELECT DISTINCT count(p.ID) FROM wp_posts as p
WHERE p.post_type = 'shop_order' AND p.post_date BETWEEN '2021-01-01' AND '2021-01-21'
AND p.post_status IN ('wc-on-hold')


SELECT order_items.order_id
FROM wp_woocommerce_order_items as order_items
LEFT JOIN wp_woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id
LEFT JOIN wp_posts AS posts ON order_items.order_id = posts.ID
WHERE posts.post_type = 'shop_order'
AND posts.post_status IN ('wc-on-hold')
AND order_items.order_item_type = 'line_item'
AND order_item_meta.meta_key = '_product_id'
AND order_item_meta.meta_value = '585'

却得不到我想要的结果

我正在寻找解决方案。有什么建议吗?

以下使用 WordPress WPDB Class 的函数将进行自定义 SQL 查询,以根据特定产品 ID、特定订单状态和指定日期:

get_order_count_by( $product_id, $status, $day )
    global $wpdb;

    $date_from = date( 'Y-m-d H:i:s', strtotime( $day ) );
    $date_to   = date( 'Y-m-d H:i:s', strtotime( $day . ' + 1 day' ) );

    return $wpdb->get_var( $wpdb->prepare("
        SELECT DISTINCT count(o.ID)
        FROM {$wpdb->prefix}posts o
        INNER JOIN {$wpdb->prefix}woocommerce_order_items oi
            ON o.ID = oi.order_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim
            ON oi.order_item_id = oim.order_item_id
        WHERE o.post_status = '%s'
            AND o.post_date >= '%s'
            AND o.post_date < '%s'
            AND oim.meta_key IN ('_product_id','_variation_id')
            AND oim.meta_value = %d
    ", $status, $date_from, $date_to, $product_id ) );
}

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。

用法示例:

<?php echo '<span class="orders_count">' . get_order_count_by( 37, 'wc-processing', '2021-01-10' ) . '<span>'; ?>