WooCommerce 更改订单行总数

WooCommerce changing order line totals

我有一个插件可以根据产品类别应用折扣。我正在使用下面的过滤器向购物车中的订单 table 添加文本:

add_filter('woocommerce_cart_product_subtotal', array($this,'change_product_subtotal'), 10, 4);
add_filter( 'woocommerce_cart_product_price', array($this,'change_product_price'), 10, 2);
add_filter( 'woocommerce_cart_item_name', array($this,'change_product_name'), 10, 2);

而这个动作改变了order/cart的总价。

add_action( 'woocommerce_after_calculate_totals', array($this,'ca_change_cart_total'), 10, 1 );

订单的总价和修改后的产品字段一样进入结帐。然而,下订单后,过滤器不再有任何影响(但总订单价格是正确的)。我的问题是:我需要使用什么挂钩来将购物车中的文本添加到下订单屏幕,或者实现相同的替代方法是什么 outcome.I 提供了显示阶段的屏幕截图命令。感谢您的贡献。

对于遇到相同问题的任何人。我找到了使用过滤器的替代方法。订单创建后循环遍历订单中的所有项目并更改总数。这样做的好处是可以有效地更改每个产品的单价,因此在 WooCommerce 管理区域中,如果您需要退款,则会显示正确的单价。我在下面显示了我的代码,显然使用您的用例需要的任何自定义逻辑将 999 替换为每种产品的相关总价(即单价 * 数量)。

add_action('woocommerce_checkout_create_order', 'on_checkout_create_order', 20, 2);
function on_checkout_create_order( $order, $data ) {
    foreach( $order->get_items() as $item_id => $line_item ){
        $order->items[$item_id]->set_subtotal(999);
        $order->items[$item_id]->set_total(999);
    }
}