添加每个项目的折扣总额作为 WooCommerce 订单项目元数据

Add the discount total for each item as WooCommerce order item metadata

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

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

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

您可以从 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');

相关: