Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Woocommerce 3中获取自定义订单项目元数据_Php_Wordpress_Woocommerce_Metadata_Orders - Fatal编程技术网

Php 在Woocommerce 3中获取自定义订单项目元数据

Php 在Woocommerce 3中获取自定义订单项目元数据,php,wordpress,woocommerce,metadata,orders,Php,Wordpress,Woocommerce,Metadata,Orders,我使用的是Woocommerce最新版本3.4.2。如何获取订单项元数据并为其分配自定义值 我使用公共数组$item\u product\u data\u array获取元数据 我需要获得一定的价值-(产品的附加修改)。并分配自定义sku 例如: 我有咖啡-sku 1001,在数组中-键[0] 产品咖啡有额外的修改-糖(元数据) 需要找到“Sugar”并分配给他定制sku-50005 [label] => Optionally select [value] => Array ( [0

我使用的是Woocommerce最新版本3.4.2。如何获取订单项元数据并为其分配自定义值

  • 我使用公共数组
    $item\u product\u data\u array
    获取元数据
  • 我需要获得一定的价值-(产品的附加修改)。并分配自定义sku
  • 例如: 我有咖啡-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
    

    更新:自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\u mod
    ,也没有使用
    $item->get\u meta\u data()


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

     $custom_thing = $item->get_meta('Custom thing');
    
    这应该包括在订单项的foreach循环中…测试并生效


    其他一些事情:

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

    @LoicTheAztec最新版本。块“//产品详细信息”效果很好。谢谢!请帮助修改产品和分配sku。对产品的额外修改总是有数量=1。伙计们,你们能告诉我,应该采取什么样的措施吗?我会试着自己写代码。现在我不知道从哪里开始。如果我在一般循环中找到了正确的成分->我给它值“50005”->我给$item\u数量[]=1请告诉我,在这种情况下,
    \u custom\u thing
    -$custom\u thing=$product->get\u meta('u Sugar');?理论上,我需要在元数据中找到所有的添加剂,并给它们我的sku。默认数量为1,谢谢!不幸的是,唯一的问题是不清楚如何完成预期的任务。也许我写的有点不清楚我想要实现什么。。。零件
    $product\u mod