在Woocommerce 3中获取自定义订单商品元数据

时间:2018-06-11 23:24:14

标签: php wordpress woocommerce metadata orders

我正在使用Woocommerce最新版本3.4.2。如何获取某些订单商品元数据并为其分配自定义值?

  1. 我使用公共数组$item_product_data_array获取元数据。
  2. 我需要获得一定的价值 - (对产品进行额外修改)。并指定自定义sku。
  3. 实施例: 我有coffe - sku 1001,在数组中 - 键[0] 产品咖啡有额外的修改 - 糖(元数据) 需要找到“Sugar”并指定他自定义sku - 50005。

    [label] => Optionally select [value] => Array ( [0] => Cinnamon [1] => Sugar [2] => Mint )
    

    也就是说,这种添加剂应该在一个周期中作为价格或数量。所有这些人都必须使用值[0]来处理他们的产品。

        // Get product details
            $items = $order->get_items();
    
            $sku = array();
            $product_kol = array();
            $product_price = array();
            $item_product_meta_data_array = array();
    
            foreach( $items as $key => $item){
                $product_kol[] = $item['qty'];
                $product_price[] = $item['line_total'];
    
                $item_id = $item['product_id'];
                $product = wc_get_product($item_id);
                $sku[] = $product->get_sku();
    
                $items_meta_data[]  = $item->get_meta_data();          
                $meta_data1 = $item->get_meta('Sugar');
                    if( ! empty( $meta_data1 ) ) {
                    $skus[] = "50005";
                    $item_quantities[] = "1";
                }
            }
    
            // Product details for sending as one line to an external service
            foreach ($sku as $key => $value){
                $data .= "&product[".$key."]=".$value."";
                $data .= "&product_kol[".$key."]=".$product_kol[$key]."";
                $data .= "&product_price[".$key."]=".$product_price[$key]."";
                if(isset($product_mod[$key])) {
                    $data .= "&product_mod[".$key."]=".$product_mod[$key]."";
                }
            }
    

    我认为这将是有用的东西,因为产品的其他选项的所有模块都将所有值添加到元数据中。并且很难将它们拉出来并将它们包含在所需的周期中。

    所以,我们应该得到:

    //products sku 
    $product[0] = "10000";  // Coffe
    $product[1] = "10001";  // Juice - second product for axample
    $product[2] = "50005";  // Sugar
    
    //products quantity
    $product_kol[0] = "1"; // Аmount of coffee
    $product_kol[1] = "1"; // Аmount of juice
    $product_kol[2] = "1"; // Аmount of sugar
    
    //Modifiers if they exist
    $product_mod[2] = "0";  //The product with key 2 is the product modifier with key 0
    

1 个答案:

答案 0 :(得分:1)

更新:自Woocommerce第3版以来,您的代码已经过时了......请参阅:

所以你的代码应该是:

$skus = $item_quantities = $line_item_totals = $items_meta_data = array();

// Loop though order items
foreach( $order->get_items() as $item_id => $item){
    $product_id = $item->get_product_id();
    $product = $item->get_product();

    $item_quantities[] = $item->get_quantity();
    $line_item_totals[] = $item->get_total();
    $skus[]            = $product->get_sku();
    $items_meta_data[]  = $item->get_meta_data();
}

// Product details for sending as one line to an external service
foreach ($skus as $key => $value){
    $data .= "&product[".$key."]=".$value."";
    $data .= "& product_kol[".$key."]=".$item_quantities[$key]."";
    $data .= "& product_price[".$key."]=".$line_item_totals[$key]."";
    if( isset($product_mod[$key]) ) {
        $data .= "&product_mod[".$key."]=".$product_mod[$key]."";
    }
}

它应该效果更好......但$product_mod未定义且未使用$item->get_meta_data()

现在要获取一些自定义元数据,如果您的自定义元键Custom thing,您将使用:

 $custom_thing = $item->get_meta('Custom thing');

这应该包含在订单商品的foreach循环中...经过测试并且有效。

其他一些事情:

  • 获取NON折扣订单项总计:$item->get_subtotal();
  • 要获得折扣订单项总计:$item->get_total();
  • 获取产品价格(单位):$product->get-price();