我需要在元数据中分别添加每个产品的折扣金额。例如,订单中有十个产品。用户已对产品应用了优惠券折扣。计算折扣总额(如果有商品on_sale,则不计入折扣计算)。
但最终,我们得到了总折扣。我需要为收到的所有产品拆分此折扣,甚至将此值写入订单项元数据中。
为什么我什至没有示例代码?我只是不知道从哪里开始。我唯一想到的是取总折扣,除以可以打折的产品数量(这些都是订单中除了on_sale之外的所有产品),并将结果数字添加到产品元中。但是有一个问题,我不确定这是否是正确的解决方案。您能否分享有关如何解决此问题的任何建议?
答案 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