我正在为销售不同类型早餐的客户创建一个Woocommerce网上商店。每个早餐根据人数有几种不同。
例如:
早餐x (产品)
- 1人(变更)
- 2人(变更)
- 3人(变更)
- 4人(变更)
每个变体包含(不同的)元数据。
基本上,元数据包含创建早餐所需的文章,并且需要在创建订单时添加到woocommerce中的订单行项目。元数据的组成对于每个变体是不同的。
现在我可以将元数据添加到订单商品中,但是在添加两个或更多产品时,元数据会以某种方式混淆。
以下是我在Woocommerce中的代码和输出。
当我使用该函数打印变体元数据而不是将其添加到woocommerce订单时,我可以看到元数据是正确的,并且最内部的for循环执行一个接一个的变化。我不知道wc_add_order_item_meta是否导致问题或者我正在调用的钩子。
function oc_line_item_metadata( $item_id, $item, $order_id ) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item) {
$variation_id = $item['variation_id'];
$product_variation = new WC_Product_Variation( $variation_id );
$meta_data = $product_variation->get_meta_data();
for ($i=0; $i < count($meta_data); $i++) {
$article = ($meta_data[$i]->get_data());
$article_id = $article['id'];
$article_key = $article['key'];
$article_value = $article['value'];
wc_add_order_item_meta( $item_id, $article_key, $article_value );
}
}
}
add_action( 'woocommerce_new_order_item', 'oc_line_item_metadata', 10, 3 );
您可以通过此链接找到输出:
https://image.ibb.co/mtsnrb/order.png
答案 0 :(得分:0)
昨天我发现some more information帮我解决了这个问题。我似乎没有使用正确的方法来获取order_id和variation_id。
下面解决了我的问题的正确代码:
function oc_line_item_metadata( $item_id, $item, $order_id ) {
$order = wc_get_order( $order_id );
foreach ($order->get_items() as $item_id => $item_obj) {
$variation_id = $item_obj->get_variation_id();
}
$product_variation = new WC_Product_Variation( $variation_id );
$meta_data = $product_variation->get_meta_data();
for ($i=0; $i < count($meta_data); $i++) {
$article = ($meta_data[$i]->get_data());
$article_id = $article['id'];
$article_key = $article['key'];
$article_value = $article['value'];
wc_add_order_item_meta( $item_id, $article_key, $article_value );
}
}