尝试从订单商品中获取产品差异对象时出现的问题

问题描述

在WooCommerce上,我试图获取产品的变体名称。 但是我收到消息错误调用未定义的函数wc_get_product()。 下面是代码:(此代码所在的文件来自向服务器发出某些请求的应用程序,因此它不在根目录上。)

$order_items = $order_data->line_items;
foreach ($order_items as $order_item) {
    if ($order_item->product_id == $product_id) {
        // Get variation if any
        $variation_id = $order_item->variation_id;
        $variation_name = wc_get_product($variation_id);
        $variation_name->get_formatted_name();

        if (empty($variation_id)) $variation_id = 0;

        $variation_prop = $product['variations'][$variation_id];
    }

}

感谢您的帮助。

编辑2: $ order_data是这样获得的:

try {
                $woocommerce = new Client($f3->get('wprestbaseurl'),$f3->get('wprestconsumer_key'),$f3->get('wpconsumer_secret'),['wp_api' => true,'version' => 'wc/v3','query_string_auth' => (0 === strpos(strtolower($f3->get('wprestbaseurl')),'https://'))]);
                // Retrieve given order Meta data
                // System IDs are stored into the "xlspadlock_activations" custom field for each order.
                $order_data = $woocommerce->get("orders/$customer_order_id");
            }
catch{....

解决方法

更新3

更新和注释后,似乎您正在外部文件上使用某些Rest API,WooCommerce类和方法将无法工作,如果尝试使用它们,则会引发错误。


初始答案:

自WooCommerce 3以来,您的代码存在一些错误,因为无法直接访问订单项和产品属性。

改为使用WC_Order_Item_Product get product_id(),get_variation_id() and get_product()方法,如下所示:

$order_items = $order->get_items(); // Get order items

// Loop through order items
foreach ( $order_items as $item) {
    // Check for specific product Id and only for product variation items
    if ( in_array( $product_id,array($item->get product_id(),$item->get variation_id() ) ) && $item->get variation_id() > 0 ) {
        // Get product variation object
        $product_variation = $item->get_product();

        // Get the product variation formatted name
        $formatted_name   = $product_variation->get_formatted_name();
        
        // ...
    }
}

相关线程:

注释:在订单商品上,当商品为产品变体时,方法get product_id()是父变量产品ID,方法get_product()给出产品变体实例对象。