【问题标题】:Add the discount total for each item as WooCommerce order item metadata将每个项目的折扣总额添加为 WooCommerce 订单项目元数据
【发布时间】:2021-06-09 09:17:42
【问题描述】:

我需要在订单元数据中分别添加每种产品的折扣金额。例如,订单中有十个产品。用户已对产品应用优惠券折扣。计算折扣总额(如果有商品on_sale,则不计入折扣计算)。

但最后,我们得到了总折扣。我需要为所有收到它的产品拆分这个折扣,甚至将这个值写入订单项目元数据。

为什么我连示例代码都没有?我只是不知道从哪里开始。我认为唯一的方法是取总折扣,除以可以打折的产品数量(这些都是订单中除 on_sale 之外的所有产品),然后将结果数量添加到产品元数据中。但是有一个问题,我不确定这是否是正确的解决方案。您能否分享有关如何解决此问题的任何建议?

【问题讨论】:

    标签: php woocommerce hook-woocommerce orders discount


    【解决方案1】:

    您可以从woocommerce_checkout_create_order_line_item action hook 开始,您可以在其中设置自定义订单商品元数据。这个钩子有 4 个参数:

    • $item订单项(对象),
    • $cart_item_key购物车商品键(字符串),
    • $values购物车项目(数组),
    • $order 订单(对象)。

    因此,您可以使用以下方式从购物车项目$values 获得折扣行项目总数:

    $line_discount     = $value['line_subtotal'] - $value['line_total'];
    $line_discount_tax = $value['line_subtotal_tax'] - $value['line_tax'];
    

    然后例如一起将行折扣总计保存为自定义订单项目元数据:

    // Save Line item discount as custom order item meta data
    add_action('woocommerce_checkout_create_order_line_item', 'action_checkout_create_order_line_item', 10, 4 );
    function action_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
        $line_discount     = $value['line_subtotal'] - $value['line_total'];
        $line_discount_tax = $value['line_subtotal_tax'] - $value['line_tax'];
        
        $item->update_meta_data( '_line_discount', $line_discount + $line_discount_tax );
    }
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    然后您可以使用WC_Data 方法get_meta() 从订单项目对象$item 中获取它,例如:

     $line_discount = $item->get_meta('_line_discount');
    

    相关:Get Order items and WC_Order_Item_Product in WooCommerce 3

    【讨论】:

    • 你好,这个解决方案就像一个魅力。但我就是无法理解。如果我申请优惠券,折扣金额将显示为所有项目单独,没有任何麻烦。例如:1.25 0.9 3.25 但我们也有单独的定制折扣。 : 并且当应用此折扣时,不会显示任何内容。 0 0 0 这很奇怪,因为单个折扣的总和不是根据使用的折扣计算的,而是根据小计金额与总计之间的差额计算的。我猜对了: $line_discount = $value['line_subtotal'] - $value['line_total'];
    • 哦,对不起,我无法称赞评论链接:stackoverflow.com/questions/65097517/… 欢迎折扣是根据此代码计算的。由于某种原因,它没有被考虑在内。这是一个链接,例如:prnt.sc/10mj1mp
    • @VictorSokoliuk 您评论中提供的链接正在使用负费用,这是 WooCommerce 不建议使用的技巧,并且 并不是真正的折扣。费用不适用于项目级别,即使它们为负数仍然是费用,但不是折扣......这就是为什么你会得到 0 0 0 0
    • 那么,如果我做对了,在这个级别上,我不会以任何方式达到这些值吗?在这种情况下,购物车的总/小计不会给我任何东西。并且只有一种方法可以改变欢迎奖金?
    • @VictorSokoliuk 1) “我不会以任何方式获得这些值?”:您可以尝试根据购物车项目行总金额和将其添加到您的自定义字段。 2) “购物车商品总额/小计金额”:不考虑费用。 3) “而且只有一种方法可以改变欢迎奖金?”:我不明白(?)。
    猜你喜欢
    • 2021-02-12
    • 2023-03-15
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2023-03-30
    • 2018-05-31
    • 1970-01-01
    相关资源
    最近更新 更多