get_product_from_item($item) WooCommerce 中弃用的替代品

get_product_from_item($item) deprecated replacement in WooCommerce

我正在尝试修复此 unsupported SagePay plugin 中一些已弃用的功能。

如何在 WooCommerce 中替换以下已弃用代码片段?

foreach ($order->get_items() as $item) {
if ($item['qty']) {
  $product = $order->get_product_from_item($item);

我可以看到这是它的替代品:

@deprecated Add deprecation notices in future release. Replaced with $item->get_product()

但简单地将其更改为 $product = $item->get_product(); 是行不通的。我还尝试将该行更改为:

$product = wc_get_product($item['id']);

但是它会在结帐期间导致内部服务器错误。

您可以在 WC_OrderWC_Order_Items 对象上使用 WC_data get_data() 方法,方法如下:

// For testing only
$order = wc_get_order(500);

// Iterate though each order item
foreach ($order->get_items() as $item_id => $item) {

    // Get the WC_Order_Item_Product object properties in an array
    $item_data = $item->get_data();

    if ($item['quantity'] > 0) {
        // get the WC_Product object
        $product = wc_get_product($item['product_id']);
        // test output
        print_r($product);
    }
}

或使用 WC_Order_Item_Product get_product_id() 方法:

// For testing only
$order = wc_get_order(500);

// Iterate though each order item
foreach ($order->get_items() as $item_id => $item) {
    if( $item->get_quantity() > 0 ){
        // Get the product id from WC_Order_Item_Product object
        $product_id = $item->get_product_id();
        // get the WC_Product object
        $product = wc_get_product($item['product_id']);

        // test output
        print_r($product);
    }
}

所有这些都在活动主题 php 文件中工作。

When testing in the theme php files I can get the WC_Product object with $item->get_product();


相关回答: