【问题标题】:WooCommerce changing order line totalsWooCommerce 更改订单行总数
【发布时间】:2020-12-02 14:34:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce


    【解决方案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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-05
      • 2017-08-14
      • 2021-05-28
      • 1970-01-01
      • 2017-05-24
      • 2021-03-09
      • 1970-01-01
      • 2018-08-09
      相关资源
      最近更新 更多