当启用高性能订单存储时,我尝试从项目 ID 获取订单项目对象。订单对象和商品对象都是未知的。订单 ID 也不知道。仅知道订单商品 ID。
我发现了这个功能:
$item = wc_get_order_id_by_order_item_id($item_id);
但它可能不兼容 HPOS,因为它不起作用。
有人可以提供从商品ID获取订单商品对象的方法吗?
我希望它是一行而不是循环运行,因为这是分析许多订单项的自定义代码。
wc_get_order_id_by_order_item_id()
允许通过订单商品 ID 获取 订单 ID,但不能获取订单商品对象。此功能与高性能订单存储(HPOS)兼容。
因此,您需要添加一些内容来从商品 ID 中获取订单商品对象。下面您将找到一个可以完成这项工作的自定义轻量级函数:
/**
* Get the Order Item Object from the order item ID.
*
* @param int $item_id Item ID.
*
* @return int or null
*/
function wc_get_order_item_object_by_item_id( $item_id ) {
$order_id = wc_get_order_id_by_order_item_id($item_id);
$order = wc_get_order($order_id);
if ( ! is_a($order, 'WC_Order') ) {
return null;
}
$order_items = $order->get_items();
return isset($order_items[$item_id]) ? $order_items[$item_id] : null;
}
代码位于子主题的functions.php文件中(或插件中)。