【问题标题】:Get Orders Count by product ID every day in Woocommerce每天在 Woocommerce 中按产品 ID 获取订单数
【发布时间】:2021-04-23 19:18:20
【问题描述】:

我想获取代表两列的表:订单日期和按指定产品 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'

但无法得到我想要的结果。

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

【问题讨论】:

  • 请发布架构、示例数据和预期结果 - 这里的大多数人都不知道 woocommerce 的复杂性。

标签: php sql wordpress woocommerce orders


【解决方案1】:

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

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>'; ?>

【讨论】:

  • 谢谢!我已将您的代码转换为 SQL 查询(因为我需要它)。但是在 phpMyAdmin 结果我得到count(o.ID) 1 但我需要这个表是两列:第一列应该是日期,第二列是顺序计数,每一行应该是2021-01-01 52021-01-02 7 等等。所以我需要一个范围内每天的订单计数。可能吗?附言我的目标是使用 wpDataTables 插件创建一个图表,该图表将根据日期显示可视化以及已为具有指定状态的选定产品的订单数量。
  • 我已经接受了答案,但它没有回答我最初的问题,因为我问过“代表两列的表格:订单日期和订单计数”。谢谢,想。
猜你喜欢
  • 2019-01-10
  • 1970-01-01
  • 2022-01-21
  • 2017-09-25
  • 1970-01-01
  • 2018-03-25
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多