我想获取代表两列的表格:按指定的产品 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'
却得不到我想要的结果。
我正在寻找解决方案。有什么建议吗?
答案 0 :(得分:2)
以下函数使用 WordPress WPDB
类,将进行自定义 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>'; ?>