如何计算从周五到周五每周售出多少产品
Posted
技术标签:
【中文标题】如何计算从周五到周五每周售出多少产品【英文标题】:How to count how many products were sold each week from Friday to Friday 【发布时间】:2020-05-06 09:05:55 【问题描述】:我试着计算从周五到周五每周售出的产品数量。 我尝试使用 meta_key total_sales,但它显示了售出的产品总量。 我想创建一份报告,显示一周内售出的产品和数量。 我想指定产品的名称和每个示例的销售单位数量: 黄油 20 已售出 面包 B 20 已售出 等等
$sql_total_sold=("SELECT p.post_title as product, pm.meta_value as total_sales FROM $wpdb->posts AS p LEFT JOIN $wpdb->postmeta AS pm ON (p.ID = pm.post_id AND pm.meta_key LIKE 'total_sales') WHERE pm.meta_value >0 AND p.post_type LIKE 'product' AND p.post_status LIKE 'publish'");
$results = $wpdb->get_results($sql_total_sold);
$counter=0;
foreach($results as $result)
$counter++;
echo $counter.' Product name : '.$result->product.'quantity'. $result->total_sales .'</br>';
【问题讨论】:
您是否尝试在 SQL 查询中使用日期过滤表达式?像这样:AND p.sale_date >= $dateFrom AND p.sale_date 不幸的是,total_sales 肯定不适用于日期,因为它计算所有销售额,而不是将它们划分为日期范围。我可能应该从日期期间接受个别订单并以某种方式计算数量,但我不知道该怎么做 【参考方案1】:显示上周总销售额(售出的产品数量)
add_action( 'woocommerce_single_product_summary', 'wc_product_sold_count_last_week', 11 );
function wc_product_sold_count_last_week()
// Get last week orders
$all_orders = wc_get_orders(
array(
'limit' => -1,
'status' => array_map( 'wc_get_order_status_name', wc_get_is_paid_statuses() ),
'date_after' => date( 'Y-m-d', strtotime( '-1 week' ) ),
'return' => 'ids',
)
);
// Sum quantities purchased
$count = 0;
$produt_sale_list = array();
foreach ( $all_orders as $all_order )
$order = wc_get_order( $all_order );
$items = $order->get_items();
foreach ( $items as $item )
$produt_sale_list[$item->get_name()][] = $item['qty'];
$count = $count + absint( $item['qty'] );
foreach ( $produt_sale_list as $produt_sold => $value )
echo "<p>$produt_sold sold: ".array_sum($value)."</p>";
if ( $count > 0 ) echo "<p>Recent sales: $count</p>";
【讨论】:
它显示了总销售额,没有细分为单个产品,我的意思是产品 A 售出 10 个产品 B 售出 20 个等 是的,它工作得几乎完美。我有一个多供应商商店,由 yith 多供应商插件创建,我想为每个销售过的卖家介绍这样一个部门【参考方案2】:尝试将您的查询更改为:
SELECT
p.post_title AS product, SUM(pm.meta_value) AS total_sales
FROM
$wpdb->posts AS p
LEFT JOIN
$wpdb->postmeta AS pm ON (p.ID = pm.post_id
AND pm.meta_key LIKE 'total_sales')
WHERE
pm.meta_value > 0
AND p.post_type LIKE 'product'
AND p.post_status LIKE 'publish'
GROUP BY UNIX_TIMESTAMP(p.sale_date) DIV 604800, product
但我不确定它是否会在夏季正常工作。
【讨论】:
以上是关于如何计算从周五到周五每周售出多少产品的主要内容,如果未能解决你的问题,请参考以下文章