3

在 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{....
4

1 回答 1

1

更新 3

在您更新和评论之后,您似乎在外部文件上使用了一些 Rest API,WooCommerce 类和方法无法工作,如果您尝试使用它们会抛出错误。


初步答案:

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

使用 instead WC_Order_Item_Product get product_id()get_variation_id()方法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()给出产品变体实例对象。

于 2020-11-05T03:07:43.680 回答