Php 将每个项目的折扣总额添加为商业订单项目元数据

Php 将每个项目的折扣总额添加为商业订单项目元数据,php,woocommerce,hook-woocommerce,orders,discount,Php,Woocommerce,Hook Woocommerce,Orders,Discount,我需要单独添加每个产品的折扣金额。例如,订单中有十种产品。用户已对产品应用优惠券折扣。已计算折扣总额(如果有正在销售的产品,则不将其计入折扣计算) 但最后,我们得到了全部折扣。我需要为所有收到折扣的产品拆分此折扣,甚至将此值写入订单项元数据 为什么我连一个示例代码都没有?我只是不知道从哪里开始。我认为唯一的办法是将总折扣除以可以享受折扣的产品数量(这些都是订单中的产品,除了在售产品),然后将得到的数量添加到产品元中。但有一个问题,我不确定这是否是正确的解决方案。您能分享一下如何解决这个问题的建议

我需要单独添加每个产品的折扣金额。例如,订单中有十种产品。用户已对产品应用优惠券折扣。已计算折扣总额(如果有正在销售的产品,则不将其计入折扣计算)

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

为什么我连一个示例代码都没有?我只是不知道从哪里开始。我认为唯一的办法是将总折扣除以可以享受折扣的产品数量(这些都是订单中的产品,除了在售产品),然后将得到的数量添加到产品元中。但有一个问题,我不确定这是否是正确的解决方案。您能分享一下如何解决这个问题的建议吗?

您可以从可以设置自定义订单项目元数据的位置开始。此挂钩有4个参数:

  • $item
    订单项(对象)
  • $cart\u item\u 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\u Data
方法
get\u meta()
从订单项目对象
$item
获取它,如:

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

相关:

您好,此解决方案非常有效。但我就是不明白。如果我申请一张优惠券,那么所有项目的折扣金额都会显示出来,不会有任何问题。例如:1.25 0.9 3.25,但我们也有个人定制折扣:当应用此折扣时,不显示任何内容。这很奇怪,因为单个折扣的总和不是根据所使用的折扣计算的,而是根据小计金额和总额之间的差额计算的。我答对了:$line_折扣=$value['line_小计]-$value['line_总计];哦,对不起,我不能恭维评论链接:欢迎折扣是基于此代码计算的。由于某些原因,它没有被考虑在内。这里有一个链接,例如:@VictorSokoliuk您的评论中提供的链接使用的是负费用,这是WooCommerce不建议使用的一个技巧,这实际上不是折扣。费用不适用于项目级别,即使是负数,也仍然是费用,但不是折扣…这就是为什么您得到0的原因。因此,正如我所理解的,在这个级别上,我不会以任何方式获得这些值?在这种情况下,购物车的总金额/小计金额不会给我任何信息。只有一种方法可以更改欢迎奖金?@VictorSokoliuk 1)“我不会以任何方式获得这些值?”:您可以尝试根据购物车项目行总金额拆分负费用金额,并将其添加到自定义字段。2) “购物车项目总额/小计金额”:不考虑费用。3) “只有一个办法可以改变欢迎奖金?”:我不明白(?)。