这可以通过以下非常简单的SQL查询和foreach循环来完成。
这将为您提供过去24小时内按产品计数的订单的产品列表 (以及产品变体,但没有父变量产品) :
global $wpdb;$results = $wpdb->get_results( " SELECt DISTINCT woim.meta_value as id, COUNT(woi.order_id) as count, woi.order_item_name as name FROM {$wpdb->prefix}woocommerce_order_itemmeta as woim INNER JOIN {$wpdb->prefix}woocommerce_order_items as woi ON woi.order_item_id = woim.order_item_id INNER JOIN {$wpdb->prefix}posts as p ON p.ID = woi.order_id WHERe p.post_status IN ('wc-processing','wc-on-hold') AND UNIX_TIMESTAMP(p.post_date) >= (UNIX_TIMESTAMP(NOW()) - (86400)) AND ((woim.meta_key LIKE '_variation_id' AND woim.meta_value > 0) OR (woim.meta_key LIKE '_product_id' AND woim.meta_value NOT IN (SELECt DISTINCT post_parent FROM {$wpdb->prefix}posts WHERe post_type LIKE 'product_variation'))) GROUP BY woim.meta_value" );// Loop though each productforeach( $results as $result ){ $product_id = $result->id; $product_name = $result->name; $orders_count = $result->count; // Formatted Output echo 'Product: ' . $product_name .' (' . $product_id . ') = ' . $orders_count . '<br>';}经过测试和工作。
如果要改为根据“今天”日期获得总数,则将在此行中的代码中替换:
AND UNIX_TIMESTAMP(p.post_date) >= (UNIX_TIMESTAMP(NOW()) - (86400))
通过这一行:
AND DATE(p.post_date) >= CURDATE()
*使用
CONVERT_TZ()SQL函数进行 *时区
调整( 将最后一个参数 调整'+10:00'为与时区匹配的偏移量)AND DATE(p.post_date) >= DATE(CONVERT_TZ( NOW(),'+00:00','+10:00'))



