从取消的 WooCommerce 订单中减少产品总销售额

Decrease product total sales count from cancelled WooCommerce Orders

我正在使用 get_total_sales() WC_Product 方法在我的 WooCommerce 商店的产品 table 中显示总销售额。

然而,这个数字在用户取消订单后不会更新,它会不断增加销售额。

任何人都可以告诉我如何更改此 get_total_sales 公式,以便能够删除总销售额中已取消的订购数量?

你是对的,在 WooCommerce 3+ 中取消已付款订单(从处理或完成状态)时,相关产品的总销售额不会减少…

有关信息,已付款 订单包括 "processing" 和 "completed" 订单状态。

当客户、商店经理或管理员取消已付款订单时,以下将减少产品总销售额:

add_action( 'woocommerce_order_status_changed', 'update_product_total_sales_on_cancelled_orders', 10, 4 );
function update_product_total_sales_on_cancelled_orders( $order_id, $old_status, $new_status, $order ){
    if ( in_array( $old_status, array('processing', 'completed') ) && 'cancelled' === $new_status
    && ! $order->get_meta('_order_is_canceled') ) {

        // Loop through order items
        foreach ( $order->get_items() as $item ) {
            // Get the WC_product object (and for product variation, the parent variable product)
            $product = $item->get_variation_id() > 0 ? wc_get_product( $item->get_product_id() ) : $item->get_product();

            $total_sales   = (int) $product->get_total_sales(); // get product total sales
            $item_quantity = (int) $item->get_quantity(); // Get order item quantity

            $product->set_total_sales( $total_sales - $item_quantity ); // Decrease product total sales
            $product->save(); // save to database
        }
        $order->update_meta_data('_order_is_canceled', '1'); // Flag the order as been cancelled to avoid repetitions
        $order->save(); // save to database
    }
}

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