繁体   English   中英

WooCommerce 更改订单行总计

[英]WooCommerce changing order line totals

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

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);

这个动作改变了订单/购物车的总价格。

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

订单的总价格以及修改后的产品字段都会被拉到结账处。 然而,当订单下达后,过滤器不再有任何效果(但总订单价格是正确的)。 我的问题是:我需要使用哪些钩子将购物车中的文本添加到下订单屏幕,或者有什么替代方法可以实现相同的结果。我提供了显示订单阶段的屏幕截图。 感谢您的任何贡献。 购物车页面 结帐页面 订单页面

对于任何有同样问题的人。 我找到了使用过滤器的替代方法。 创建订单后,循环遍历订单中的所有项目并更改总数。 这样做的好处是可以有效地改变每个产品的单价,所以在 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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM