将每件商品的折扣总额添加为 WooCommerce 订单商品元数据

时间:2021-03-11 11:20:48

标签: php woocommerce hook-woocommerce orders discount

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

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

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

1 个答案:

答案 0 :(得分:2)

您可以从 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 文件中。经测试有效。

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

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

相关:Get Order items and WC_Order_Item_Product in WooCommerce 3